home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / program / inter54c.zip / INTERRUP.L < prev    next >
Text File  |  1997-06-29  |  343KB  |  9,154 lines

  1. Interrupt List, part 12 of 16
  2. Copyright (c) 1989,1990,1991,1992,1993,1994,1995,1996,1997 Ralf Brown
  3. --------F-2FC0-------------------------------
  4. INT 2F - MTEZ XpressFax Hardware TSR (CLASS2) - API
  5.     AH = C0h
  6.     AL = function code (01h to 15h)
  7. Return: ???
  8. SeeAlso: AX=C000h/BX=444Bh,AX=CB00h/BX=4D53h
  9. --------N-2FC000-----------------------------
  10. INT 2F - Novell ODI Link Support Layer (LSL.COM) - INSTALLATION CHECK
  11.     AX = C000h
  12. Return: AL = FFh if installed
  13.         DX:BX -> FAR entry point (see #2631,#2632,#2633)
  14.         ES:SI -> signature string "LINKSUP$"
  15. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  16. Note:    on return, ES = DX for LSL v1.10 and v2.05; LSL makes use of this in
  17.       its search for a previous installation
  18. SeeAlso: AX=5100h,AX=C000h"NESL"
  19.  
  20. (Table 2631)
  21. Call LSL function "Request MLID Registration" with:
  22.     BX = 0001h
  23.     ES:SI -> registration??? record (see #2635)
  24.     DS:DI -> buffer for LSL information block (see #2636)
  25. Return: AX = completion code (0000h,8001h) (see #2634)
  26.     DS:DI buffer filled if successful
  27.     BX,CX corrupted
  28. Note:    see "Novell LAN Driver Developer's Guide, Volume III" for more details
  29.  
  30. (Table 2632)
  31. Call LSL function "get support entry points" with:
  32.     BX = 0002h
  33.     ES:SI -> buffer for entry point record (see #2637)
  34. Return: ES:SI buffer filled
  35.  
  36. (Table 2633)
  37. Call LSL function "Request MLID API entry point" with:
  38.     BX = 0003h
  39. Return: ES:SI -> MLID (Multiple Link Interface Driver) API entry point
  40.         (call with BX=function 00h-10h, not range-checked)
  41. Note:    LSL v1.10 and v2.05 execute BX=0003h for BX=0000h and any BX >= 0003h
  42.  
  43. (Table 2634)
  44. Values for LSL completion code:
  45.  0000h    successful
  46.  8001h    out of resources
  47.  8002h    bad parameter
  48.  8003h    no more items
  49.  8004h    item not present
  50.  8005h    failed
  51.  8006h    receive overflow
  52.  8007h    canceled
  53.  8008h    bad command
  54.  8009h    duplicate entry
  55.  800Ah    no such handler
  56.  800Bh    no such driver
  57.  
  58. Format of LSL registration record:
  59. Offset    Size    Description    (Table 2635)
  60.  00h    DWORD    -> ??? FAR function (to be called with ES:SI -> ??? and
  61.           returning AX = completion code)
  62.  04h    DWORD    -> ???
  63.  08h    DWORD    -> ??? data (at least 3Eh bytes)
  64.  
  65. Format of LSL information block:
  66. Offset    Size    Description    (Table 2636)
  67.  00h    DWORD    -> ??? entry point (called with BX=function 00h-11h)
  68.  04h    WORD    ???
  69.  06h    WORD    ???
  70. Note:    due to a fencepost error, LSL v2.05 (distributed with Novell DOS 7)
  71.       will crash if the above entry point is called with BX=0012h
  72.  
  73. Format of entry point record:
  74. Offset    Size    Description    (Table 2637)
  75.  00h    DWORD    pointer to protocol support entry point in LSL (see #2638)
  76.  04h    DWORD    pointer to general support entry point in LSL (see #2639)
  77.  
  78. (Table 2638)
  79. Call protocol support entry point with:
  80.     BX = function number
  81.         0000h ???
  82.         0001h ???
  83.         0002h ???
  84.         0003h "ScheduleAESEvent"
  85.         ES:SI -> AES ECB to be scheduled (see #2642)
  86.         Return: ES,SI preserved
  87.         0004h "CancelAESEvent"
  88.         ES:SI -> ECB to be cancelled (see #2642)
  89.         Return: ES,SI preserved
  90.         0005h "GetIntervalMarker"
  91.         Return: DX:AX = current interval marker in milliseconds
  92.             all other registers preserved
  93.         0006h "RegisterStack"
  94.         AX = logical board number
  95.         ES:SI -> bound stack info structure (see #2652)
  96.         Return: BX = assigned Stack ID if AX=0000h
  97.         0007h "DeRegisterStack"
  98.         AX = protocol stack's assigned Stack ID
  99.         0008h "RegisterDefaultStack"
  100.         AX = logical board number
  101.         ES:SI -> stack info structure (see #2653)
  102.         0009h "DeRegisterDefaultStack"
  103.         AX = logical board number
  104.         000Ah "RegisterPrescanStack"
  105.         AX = logical board number
  106.         ES:SI -> stack info structure (see #2653)
  107.         000Bh "DeRegisterPrescanStack"
  108.         AX = logical board number
  109.         000Ch "SendPacket"
  110.         ES:SI -> send ECB
  111.         Return: interrupts disabled
  112.         000Dh ???
  113.         000Eh ???
  114.         000Fh ???
  115.         0010h "GetStackIDFromName"
  116.         ES:SI -> counted NUL-terminated protocol name (max 15 chars)
  117.         Return: BX = Stack ID if AX=0000h
  118.         0011h "GetPIDFromStackIDBoard"
  119.         AX = Stack ID for protocol
  120.         CX = logical board number
  121.         ES:SI -> 6-byte buffer for protocol ID
  122.         0012h "GetMLIDControlEntry"
  123.         AX = logical board number
  124.         Return: ES:SI -> MLID control handler (see #2640) if AX=0000h
  125.         0013h "GetProtocolControlEntry"
  126.         AX = Stack ID or
  127.             FFFEh Prescan stack
  128.                 CX = logical board number
  129.             FFFFh default protocol
  130.                 CX = logical board number
  131.         Return: ES:SI -> protocol stack control entry point if AX=0000h
  132.                   (see #2641)
  133.         0014h "GetLSLStatistics"
  134.         Return: AX = 0000h (successful)
  135.             ZF set
  136.             ES:SI -> LSL statistics table (see #2644)
  137.         0015h "BindStack"
  138.         AX = protocol stack's assigned Stack ID
  139.         CX = logical board number
  140.         0016h "UnbindStack"
  141.         AX = protocol stack's assigned Stack ID
  142.         CX = logical board number
  143.         0017h "AddProtocolID"
  144.         AX = frame type ID code
  145.         ES:SI -> 6-byte protocol ID
  146.         CX:DI -> counted NUL-terminated short protocol name (max 15 ch)
  147.         0018h "RelinquishControl"
  148.         Return: after LSL performs any necessary background processing
  149.         0019h "GetLSLConfiguration"
  150.         Return: AX = 0000h (successful)
  151.             ZF set
  152.             ES:SI -> LSL configuration table (see #2643)
  153.         001Ah "GetTickMarker"
  154.         Return: AX = number of 55ms ticks since LSL loaded
  155.             BX destroyed
  156. Return: AX = completion code (see #2634)
  157.     ZF set if successful
  158.     SS:SP, DS, BP preserved; most other registers may be destroyed
  159.  
  160. (Table 2639)
  161. Call general support entry point with:
  162.     BX = function number
  163.         0000h "Allocate Memory" (obsolete)
  164.          always returns AX=8008h (BAD_COMMAND)
  165.         0001h "Free Memory" (obsolete)
  166.          always returns AX=8008h (BAD_COMMAND)
  167.         0002h "Realloc Memory" (obsolete)
  168.          always returns AX=8008h (BAD_COMMAND)
  169.         0003h "Memory Statistics" (obsolete)
  170.          always returns AX=8008h (BAD_COMMAND)
  171.         0004h "Add Memory To Pool" (obsolete)
  172.          always returns AX=8008h (BAD_COMMAND)
  173.         0005h "AddGeneralService"
  174.         ES:SI -> General Service Control Block (see #2654)
  175.         0006h "RemoveGeneralService"
  176.         ES:SI -> General Service Control Block (see #2654)
  177.         0007h "GetNETcfgPath"
  178.         Return: AX = 0000h (successful)
  179.             DS:DX -> ASCIZ pathname for NET.CFG
  180.         0008h U ???     (in LSL 1.10)
  181.         Return: AX = 0000h
  182.             ES:SI -> ??? (a 22-byte data area)
  183.         000Ah "GetCriticalSectionStatus"
  184.         Return: BX = total outstanding calls to "StartCriticalSection"
  185.         000Bh "ServiceEvents"
  186.         interrupts disabled
  187.         Return: interrupts disabled
  188.         0010h "GetStackECB"
  189.         DS:DI -> Lookahead structure (see #2655)
  190.         interrupts disabled
  191.         Return: ES:SI -> ECB if successful (AX=0000h,ZF set)
  192.             interrupts disabled
  193.         8000h-FFFFh reserved for user general service providers
  194. Return: AX = completion code (see #2634)
  195.     ZF set if successful
  196.     SS:SP, DS, BP preserved
  197.  
  198. (Table 2640)
  199. Call MLID control handler with:
  200.     AX = logical board number
  201.     BX = function number
  202.         0000h "GetMLIDConfiguration"
  203.         Return: ES:SI -> MLID's configuration table if successful
  204.                   (see #2647 for format)
  205.         0001h "GetMLIDStatistics"
  206.         Return: ES:SI -> MLID's statistics table if successful
  207.                   (see #2647 for format)
  208.         0002h "AddMulticastAddress"
  209.         ES:SI -> 6-byte multicast address to add
  210.         0003h "DeleteMulticastAddress"
  211.         ES:SI -> 6-byte multicast address to delete
  212.         0005h "MLIDShutdown"
  213.         CX = type
  214.             0000h permanent (also deregisters from LSL)
  215.             other temporary (shutdown hardware only)
  216.         0006h "MLIDReset" reinitialize board / restart from temp shutdown
  217.         0007h "Create Connection" (obsolete?)
  218.         ???
  219.         0008h "Delete Connection" (obsolete?)
  220.         ???
  221.         0009h "SetLookAheadSize"
  222.         CX = requested lookahead size (00h-80h)
  223.         000Ah "PromiscuousChange"
  224.         CX = what to receive promiscuously
  225.             bit 0: MAC frames
  226.             bit 1: non-MAC frames
  227.         000Bh "RegisterReceiveMonitor"
  228.         CX = subfunction
  229.             0000h disable receive monitoring
  230.             else  enable receive monitoring
  231.         ES:SI -> monitor receive routine
  232.         ES:DI -> monitor transmit routine
  233.         000Ch "Driver Poll" (obsolete?)
  234.         ???
  235. Return: AX = completion code (see #2634)
  236.     ZF set if successful
  237. Note:    not all boards/MLIDs support function 0010h; see bit 13 in the MLID
  238.       mode flags field of the MLID's configuration table
  239.  
  240. (Table 2641)
  241. Call protocol stack control entry point with:
  242.     BX = function number
  243.         0000h "GetProtocolStackConfiguration"
  244.         Return: ES:SI -> protocol stack's configuration table
  245.                    (see #2646)
  246.         0001h "GetProtocolStackStatistics"
  247.         Return: ES:SI -> protocol stack's statistics table (see #2645)
  248.         0002h "BindToMLID"
  249.         CX = board number to bind to
  250.         ES:SI -> implementation-dependant parameter string
  251.         0003h "UnBindFromMLID"
  252.         CX = board number from which protocol should unbind
  253.         ES:SI -> optional implementation-dependant parameter string
  254.         0004h "MLIDDeRegistered"
  255.         CX = board number that has de-registered from LSL
  256. Return: AX = status
  257.         0000h successful
  258.         else implementation-dependant error codes
  259.     ZF set if successful
  260.     SS:SP, DS, BP preserved
  261.  
  262. Format of AES ECB:
  263. Offset    Size    Description    (Table 2642)
  264.  00h    DWORD    "AESLink" pointer used by LSL for list management
  265.  04h    DWORD    number of milliseconds to wait
  266.  08h    DWORD    "AESStatus" (is set to 00000000h when AES ESR is invoked)
  267.  0Ch    DWORD    -> function to be invoked when time expires
  268.         ES:SI will point to this structure on entry,
  269.         DS, BP, and SS:SP must be preserved.
  270. SeeAlso: #2656
  271.  
  272. Format of LSL Configuration Table:
  273. Offset    Size    Description    (Table 2643)
  274.  00h    BYTE    major version of configuration table
  275.  01h    BYTE    minor version of configuration table (decimal, 0-99)
  276.  02h  8 BYTEs    reserved
  277.  0Ah    BYTE    LSL major version (decimal)
  278.  0Bh    BYTE    LSL minor version (decimal, 0-99)
  279. ---LSL 1.0x ---
  280.  0Ch 14 BYTEs    reserved
  281. ---LSL 1.10+ ---
  282.  0Ch    WORD    maximum number of boards which LSL can handle
  283.  0Eh    WORD    maximum number of protocol IDs which LSL can handle
  284.  10h 12 BYTEs    reserved
  285.  
  286. Format of LSL Statistics Table:
  287. Offset    Size    Description    (Table 2644)
  288.  00h    BYTE    major version of statistics table format
  289.  01h    BYTE    minor version of statistics table format (decimal, 0-99)
  290.  02h    WORD    "GenericCounters" number of counters in static portion of
  291.           table
  292.  04h    DWORD    "ValidCountersMask" bit mask indicating which generic
  293.           counters are actually used.  Bit 31 = TotalTxPackets, bit 30
  294.           is the next field, etc.
  295.  08h    DWORD    "TotalTxPackets" total SendPacket requests made
  296.  0Ch    DWORD    reserved
  297.  10h    DWORD    reserved
  298.  14h    DWORD    "AESEventsCount" number of completed AES events
  299.  18h    DWORD    "PostponedEvents" number of events postponed due to critical
  300.           sections inside the MLIDs
  301.  1Ch    DWORD    "CancelAESFailures" number of times CancelAESEvent failed
  302.  20h    DWORD    reserved
  303.  24h    DWORD    reserved
  304.  28h    DWORD    "TotalRxPackets" total number of GetStackECB requests
  305.  2Ch    DWORD    "UnclaimedPackets" total number of packets not consumed by a
  306.           protocol stack
  307.  30h    WORD    "NumberCustom" number of custom variables that follow
  308.  32h  N DWORDs    custom counters
  309.       N DWORDs    -> CustomCounterStrN (one per custom counter)
  310.     var    length-prepended and NULL terminated string for Counter 0
  311.     ...
  312.     var    length-prepended and NULL terminated string for Counter N-1
  313. SeeAlso: #2645,#2651
  314.  
  315. Format of Protocol Stack Statistics Table:
  316. Offset    Size    Description    (Table 2645)
  317.  00h    BYTE    statistics table major version
  318.  01h    BYTE    statistics table minor version (decimal, 0-99)
  319.  02h    WORD    number of generic counters following
  320.  04h    DWORD    "ValidCountersMask" (bitmask, bit 31 is TotalTxPackets)
  321.  08h    DWORD    TotalTxPackets
  322.  0Ch    DWORD    TotalRxPackets
  323.  10h    DWORD    IgnoredRxPackets
  324.  14h    WORD    number of custom counters
  325.  16h  N DWORDs    custom counters
  326.       N DWORDs    -> CustomCounterStrN (one per custom counter)
  327.     var    length-prepended and NULL terminated string for Counter 0
  328.     ...
  329.     var    length-prepended and NULL terminated string for Counter N-1
  330. SeeAlso: #2644,#2651
  331.  
  332. Format of Protocol Stack Configuration Table:
  333. Offset    Size    Description    (Table 2646)
  334.  00h    BYTE    configuration table major version
  335.  01h    BYTE    configuration table minor version (decimal, 0-99)
  336.  02h    DWORD    -> counted NUL-terminated long descriptive name for protocol
  337.  06h    DWORD    -> counted NUL-terminated short name for protocol (15 chars)
  338.  0Ah    BYTE    protocol stack major version
  339.  0Bh    BYTE    protocol stack minor version (decimal, 0-99)
  340.  0Ch 16 BYTEs    reserved for future use
  341.  
  342. Format of MLID Configuration Table:
  343. Offset    Size    Description    (Table 2647)
  344.  00h 26 BYTEs    signature 'HardwareDriverMLID         ' (8 spaces on end)
  345.  1Ah    BYTE    configuration table major version
  346.  1Bh    BYTE    configuration table minor version (decimal, 0-99)
  347.  1Ch  6 BYTEs    node address
  348.  22h    WORD    MLID mode flags (see #2648)
  349.  24h    WORD    board number
  350.  26h    WORD    board instance (if more than one of same board installed)
  351.  28h    WORD    maximum packet size
  352.  2Ah    WORD    BestDataSize
  353.  2Ch    WORD    WorstDataSize
  354.  2Eh    DWORD    -> counted NUL-terminated long name for NIC
  355.  32h    DWORD    -> counted NUL-terminated short name for NIC (8 chars max)
  356.  36h    DWORD    -> counted NUL-terminated Frame and Media type
  357.  3Ah    WORD    reserved (0000h)
  358.  3Ch    WORD    frame type ID
  359.  3Eh    WORD    TransportTime (milliseconds)
  360.  40h    DWORD    -> SourceRouteHandler for TokenRing. (Used by ROUTE.COM)
  361.  44h    WORD    lookahead size
  362.  46h    WORD    line speed (Mbps if high bit clear, else Kbps)
  363.  48h    WORD    QueueDepth
  364.  4Ah  6 BYTEs    reserved (0)
  365.  50h    BYTE    driver major version
  366.  51h    BYTE    driver minor version (decimal, 0-99)
  367.  52h    WORD    bus/multicast flags (see #2649)
  368.  54h    WORD    send retries
  369.  56h    DWORD    ConfigTableLink
  370.  5Ah    WORD    MLID sharing flags (see #2650)
  371.  5Ch    WORD    slot number
  372.  5Eh    WORD    I/O address 1
  373.  60h    WORD    I/O range 1
  374.  62h    WORD    I/O address 2
  375.  64h    WORD    I/O range 2
  376.  66h    DWORD    memory address 1
  377.  6Ah    WORD    memory size 1
  378.  6Ch    DWORD    memory address 2
  379.  70h    WORD    memory size 2
  380.  72h    BYTE    interrupt line 1
  381.  73h    BYTE    interrupt line 2
  382.  74h    BYTE    DMA line 1
  383.  75h    BYTE    DMA line 2
  384.  
  385. Bitfields for MLID mode flags:
  386. Bit(s)    Description    (Table 2648)
  387.  15    MLID supports Octet Reversal
  388.  14    node address is non-canonical
  389.  13    promiscuous mode is supported
  390.  12-8    reserved
  391.  7    LDataSize field in LookAhead structure supported
  392.  6    raw send supported
  393.  5    MLID needs to be polled by LSL
  394.  4    reserved (0)
  395.  3    multicasting is supported
  396.  2    not currently used by DOS ODI, set to 0.
  397.  1    network card uses DMA.
  398.  0    RealDriverBit, always set to 1.
  399.  
  400. Bitfields for bus/multicast flags:
  401. Bit(s)    Description    (Table 2649)
  402.  10-9    specialized multicast support
  403.     00 = Group addressing is default for medium
  404.     01 = Invalid
  405.     10 = Filter group address in MLID.
  406.     11 = Adapter filters group address.
  407.  2    supports Micro Channel cards
  408.  1    supports ISA cards
  409.  0    supports EISA cards
  410.  
  411. Bitfields for MLID sharing flags:
  412. Bit(s)    Description    (Table 2650)
  413.  8    NIC can share DMA2
  414.  7    NIC can share DMA1
  415.  6    NIC can share IRQ2
  416.  5    NIC can share IRQ1
  417.  4    NIC can share Memory2
  418.  3    NIC can share Memory1
  419.  2    NIC can share IO2
  420.  1    NIC can share IO1
  421.  0    MLID is currently shut down
  422.  
  423. Format of MLID Statistics Table:
  424. Offset    Size    Description    (Table 2651)
  425.  00h    BYTE    driver statistics table major version
  426.  01h    BYTE    driver statistics table minor version (decimal, 0-99)
  427.  02h    WORD    number of generic counters (typically 13)
  428.  04h    DWORD    "ValidCountersMask" (bit mask, bit 31 is TotalTxCount)
  429.  08h    DWORD    TotalTxCount
  430.  0Ch    DWORD    TotalRxCount
  431.  10h    DWORD    NoECBAvailableCount
  432.  14h    DWORD    TxTooBigCount
  433.  18h    DWORD    TxTooSmallCount
  434.  1Ch    DWORD    RxOverflowCount
  435.  20h    DWORD    RxTooBigCount
  436.  24h    DWORD    RxTooSmallCount
  437.  28h    DWORD    TxMiscCount
  438.  2Ch    DWORD    RxMiscCount
  439.  30h    DWORD    TxRetryCount
  440.  34h    DWORD    RxChecksumErrorCount
  441.  38h    DWORD    RxMismatchCount
  442.  3Ch    WORD    number of custom counters
  443.  3Eh  N DWORDs    custom counters
  444.       N DWORDs    -> CustomCounterStrN (one per custom counter)
  445.     var    length-prepended and NULL terminated string for Counter 0
  446.     ...
  447.     var    length-prepended and NULL terminated string for Counter N-1
  448. SeeAlso: #2644,#2645
  449.  
  450. Format of bound stack info structure:
  451. Offset    Size    Description    (Table 2652)
  452.  00h    DWORD    -> protocol stack's short name (counted, NUL-terminated)
  453.  04h    DWORD    -> receive handler
  454.  08h    DWORD    -> control handler
  455.  
  456. Format of stack info structure:
  457. Offset    Size    Description    (Table 2653)
  458.  00h    DWORD    -> receive handler
  459.  04h    DWORD    -> control handler
  460.  
  461. Format of General Service Control Block:
  462. Offset    Size    Description    (Table 2654)
  463.  00h    DWORD    -> next GSCB (maintained internally by LSL)
  464.  04h    DWORD    -> entry point for general service handler
  465.  08h    WORD    command code for this general service (8000h-FFFFh)
  466. Note:    the control block must not be altered or deallocated until the general
  467.       service is removed
  468.  
  469. Format of Lookahead structure:
  470. Offset    Size    Description    (Table 2655)
  471.  00h    DWORD    -> Media header
  472.  04h    DWORD    -> lookahead buffer
  473.  08h    WORD    length of lookahead buffer
  474.  0Ah  6 BYTEs    protocol ID
  475.  10h    WORD    logical board number
  476.  12h    WORD    lookahead size
  477.  
  478. Format of ODI ECB:
  479. Offset    Size    Description    (Table 2656)
  480.  00h    DWORD    link to next ECB
  481.  04h    DWORD    link to previous ECB
  482.  08h    WORD    general status
  483.         0000h received successfully
  484.         8006h packet overflow
  485.         8007h reception aborted (data not valid)
  486.  0Ah    DWORD    -> event service routine or RETF (never 0000h:0000h)(see #2657)
  487.  0Eh    WORD    protocol stack identifier
  488.  10h  6 BYTEs    protocol ID (sending only)
  489.  16h    WORD    MLID board number (sending only)
  490.  18h  6 BYTEs    MAC destination address
  491.  1Eh  4 BYTEs    driver workspace
  492.  22h  8 BYTEs    protocol workspace
  493.  2Ah    WORD    total length of sent buffer
  494.  2Ch    WORD    fragment count
  495.  2Eh  2 WORDs    segment,offset of first fragment buffer
  496.  32h    WORD    length of first fragment buffer
  497.     ...
  498. SeeAlso: #2642
  499.  
  500. (Table 2657)
  501. Values event service routine is called with:
  502.     ES:SI -> associated ODI ECB (see #2656)
  503.     interrupts disabled
  504. Return: DS,BP,SS,SP preserved
  505.     interrupt disabled
  506. Notes:    the service routine may invoke any IPX/ODI function except CloseSocket
  507.     it is safe to send a packet and wait for completion if enough stack
  508.       space is available
  509. --------N-2FC000-----------------------------
  510. INT 2F - Novell NetWare Event Service Layer (NESL) 1.0 - INSTALLATION CHECK
  511.     AX = C000h
  512. Return: AL = FFh if installed
  513.         DX:BX -> FAR entry point (see #2658,#2659,#2660,#2661,#2662,#2663)
  514.         ES:SI -> signature string "NESL_EVENTS"
  515. Program: NESL is a generic interface for event handling in ODI drivers and
  516.       other NetWare-oriented modules.  Primarily intended to support
  517.       power management and "hot swapping" of PCMCIA cards, but it is not
  518.       limited to this.
  519. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  520. SeeAlso: AX=C000h"Link Support Layer",AX=C000h"NETWARN"
  521.  
  522. (Table 2658)
  523. Call NESL function GetNESLConfigPointer with:
  524.     BX = 0000h
  525. Return: AX = completion code (0000h,8008h) (see #2664)
  526.     ES:SI -> NESL configuration table if successful (see #2665)
  527.     BP,DS,STACK preserved
  528. Desc:    Obtain a pointer to the NESL Configuration Table
  529. SeeAlso: #2659,#2662
  530.  
  531. (Table 2659)
  532. Call NESL function RegisterEventProducer with:
  533.     BX = 0001h
  534.     ES:SI -> Producer Event Control Block (PECB) (see #2666)
  535. Return: AX = completion code (0000h, 8005h, 8008h) (see #2664)
  536.     ES:SI -> still points to PECB
  537.     BP,DS,STACK preserved
  538. Desc:    Allows a module to register as a producer of a given event class
  539. Note:    PECB_ClassName and PECB_Flags must be filled in on entry
  540. SeeAlso: #2517,#2660,#2661,#2662
  541.  
  542. (Table 2660)
  543. Call NESL function DeRegisterEventProducer with:
  544.     BX = 0002h
  545.     ES:SI -> PECB previously passed to RegisterEventProducer (see #2666)
  546. Return: AX = completion code (0000h, 8002h, 8008h) (see #2664)
  547.     ES:SI -> still points to PECB
  548.     BP,DS,STACK preserved
  549. Desc:    Allows a module to de-register as a producer of a given event class
  550. SeeAlso: #2659,#2663
  551.  
  552. (Table 2661)
  553. Call NESL function EventNotification with:
  554.     BX = 0003h
  555.     ES:SI -> PECB previously registered (see #2666)
  556. Return: AX = completion code (0h, 8005h, 8008h) (see #2664)
  557.     ES:SI -> still points to PECB
  558.     BP,DS,STACK preserved
  559. Desc:    Allows a module to signal that an event has just occurred in a given
  560.       event class.
  561. Notes:    Once called, NESL will generate corresponding callouts for this
  562.       event, as described in Table #2668.
  563.     on entry, the PECB_DataPtr must point at an Event Parameter Block (EPB)
  564.       (see #2669) filled in to match the desired event
  565. SeeAlso: #2659
  566.  
  567. (Table 2662)
  568. Call NESL function RegisterEventConsumer with:
  569.     BX = 0004h
  570.     ES:SI -> Consumer Event Control Block (CECB) (see #2667)
  571. Return: AX = completion code (0h, 8005h, 8008h) (see #2664)
  572.     ES:SI -> still points to CECB
  573.     BP,DS,STACK preserved
  574. Desc:    Allows a module to register as a consumer of a given event class
  575. Note:    on entry, the CECB_ClassName, CECB_NotifProc and CECB_OSILevel must be
  576.       filled in.
  577. SeeAlso: #2659,#2663
  578.  
  579. (Table 2663)
  580. Call NESL function DeRegisterEventConsumer with:
  581.     BX = 0005h
  582.     ES:SI -> CECB previously passed to RegisterEventConsumer (see #2667)
  583. Return: AX = completion code (0h, 8002h, 8008h) (see #2664)
  584.     ES:SI -> still points to CECB
  585.     BP,DS,STACK preserved
  586. Desc:    Allows a module to de-register as a consumer of a given event class
  587. SeeAlso: #2660,#2662
  588.  
  589. (Table 2664)
  590. Values for NESL Error code:
  591.  0000h    Successful
  592.  8002h    Bad Parameter
  593.  8005h    Fail
  594.  8008h    Bad Command
  595.  
  596. Format of NESL Configuration Table:
  597. Offset    Size    Description    (Table 2665)
  598.  00h    WORD    NESL_Cfg_MajVer     Major Version of this table (=1)
  599.  02h    WORD    NESL_Cfg_MinVer     Minor Version of this table (=0)
  600.  04h    DWORD    NESL_Cfg_ModLName   -> ASCIZ long name of NESL module
  601.         (typically -> "NetWare Event Service Layer for 16-Bit DOS")
  602.  08h    DWORD    NESL_Cfg_ModSName   -> ASCIZ short name of NESL module
  603.         (typically -> "NESL")
  604.  0Ch    WORD    NESL_Cfg_ModMajVer  Major Version of NESL itself (=1)
  605.  0Eh    WORD    NESL_Cfg_ModMinVer  Minor Version of NESL itself (=0)
  606.  
  607. Format of NESL Producer Event Control Block (PECB):
  608. Offset    Size    Description    (Table 2666)
  609.  00h    WORD    PECB_MajVer  Major Version of this structure (=1)
  610.  02h    WORD    PECB_MinVer  Minor Version of this structure (=0)
  611.  04h    DWORD    PECB_NextProducer   -> next PECB.  NULL if last.
  612.  08h    DWORD    PECB_ClassName        -> ASCIZ string identifying event
  613.                       class (see #2670)
  614.  0Ch    DWORD    PECB_ConsumerList   -> list of consumers for this event class
  615.  10h    DWORD    PECB_DataPtr        -> points to additional data during events
  616.  14h    DWORD    PECB_Flags
  617.         Bit 0    =0  consumers should be called "top down" for this
  618.                 event class.  (OSI level 7 down to OSI level 1)
  619.             =1  consumers should be called "bottom up"
  620.         Bits 1-31   Reserved =0
  621.  18h  8 BYTEs    PECB_Reserved (all zeros)
  622. Note:    Although the event producer provides the memory for the PECB, the
  623.       NESL module controls this memory until the event class is
  624.       de-registered.
  625.     While owned by NESL, this structure should be treated as read-only,
  626.       except for the PECB_DataPtr field.
  627.  
  628. Format of NESL Consumer Event Control Block (CECB):
  629. Offset    Size    Description    (Table 2667)
  630.  00h    WORD    CECB_MajVer  Major Version of this structure (=1)
  631.  02h    WORD    CECB_MinVer  Minor Version of this structure (=0)
  632.  04h    DWORD    CECB_NextConsumer   -> next CECB.  NULL if last.
  633.  08h    DWORD    CECB_ClassName        -> ASCIZ string identifying event
  634.                       class (see #2670)
  635.  0Ch    DWORD    CECB_NotifProc        -> FAR CALL event handler (see #2668)
  636.  10h    WORD    CECB_OSILevel
  637.         Bits 4-7 = OSI Layer of this module (1 through 7)
  638.         Bits 0-3 = relative ordering with other modules on same layer
  639.  13h 14 BYTEs    CECB_Reserved (all zeros)
  640. Note:    Although the event consumer provides the memory for the CECB, the
  641.       NESL module controls this memory until the consumer is de-registered.
  642.     While owned by NESL, this structure should be treated as read-only,
  643.  
  644. (Table 2668)
  645. Values NESL Consumer Notification Procedure is called with:
  646.     ES:SI -> Event Parameter Block (EPB) (see #2669)
  647. Return: AX = completion code (0000h, 8005h) (see #2664)
  648.     ES:SI -> still points to EPB
  649. Desc:    Called by NESL to notify the consumer when an event has occurred in
  650.       an event class for which it has registered.
  651. SeeAlso: #2667
  652.  
  653. Format of NESL Event Parameter Block (EPB):
  654. Offset    Size    Description    (Table 2669)
  655.  00h    WORD    EPB_MajVer  Major Version of this structure (=1)
  656.  02h    WORD    EPB_MinVer  Minor Version of this structure (=0)
  657.  04h    DWORD    EPB_ClassName  -> ASCIZ string identifying event class
  658.                   (see #2670)
  659.  08h    DWORD    EPB_EventName  -> ASCIZ string identifying event within
  660.                   class (see #2671)
  661.  0Ch    DWORD    EPB_ModuleName -> ASCIZ string identifying module
  662.                   producing event
  663.  10h    DWORD    EPB_DataPtr0   -> event-defined data or NULL if not used
  664.  14h    DWORD    EPB_DataPtr1   -> event-defined data or NULL if not used
  665.  18h  8 BYTEs    EPB_Reserved (all zeros)
  666.  
  667. (Table 2670)
  668. Values for NESL Event Class Names:
  669.  Event Class        Description
  670.  -------------------    -----------------------------------------
  671.  Service Suspend    Suspension of a service.  Called top-down.
  672.  Service Resume        Resumption/availability of a service. Called bottom-up.
  673.  Service/Status Change    Change in status or level of service.  Called top-down.
  674.  Suspend Request    Request to suspend a service.  Called bottom-up.
  675. Note:    Contact Novell Labs to register new event classes.
  676.  
  677. (Table 2671)
  678. Values for NESL Event Names:
  679.  Event Name            Class            Description
  680.  --------------------------    -------------        ---------------------------
  681.  MLID Cable Disconnect        Service Suspend        Cable disconnected from NIC
  682.  MLID Card Removal        Service Suspend        PCMCIA card removed
  683.  MLID Hardware Failure        Service Suspend        Serious hardware
  684.                               failure in NIC
  685.  MLID Not In Range        Service Suspend        Wireless access point
  686.                               is out of range
  687.  MLID Shutdown            Service Suspend        MLID was shut down
  688.  MLID Media Access Denied    Service Suspend        Access to physical
  689.                               medium unsuccessful
  690.  MLID Cable Reconnect        Service Resume        Cable re-connected to NIC
  691.  MLID Card Insertion Complete    Service Resume        PCMCIA card inserted
  692.  MLID In Range            Service Resume        Wireless access point
  693.                               in range
  694.  MLID Reset            Service Resume        MLID was just reset
  695.  MLID Access Point Change    Serv/Status Change  Station has moved to
  696.                               new access point
  697.  MLID Speed Change        Serv/Status Change  Change in communic. speed
  698. Note:    Contact Novell Labs to register new event names.
  699.     For all predefined events above, EPB_DataPtr0 (see #2669) points
  700.       to the MLID Configuration table (see AX=C000h"ODI") for the
  701.       affected MLID.
  702. --------N-2FC000-----------------------------
  703. INT 2F - Novell NetWare Connect NETWARN - INSTALLATION CHECK
  704.     AX = C000h
  705. Return: AL = FFh if installed
  706.         SI = segment of resident portion
  707. Program: NETWARN is a utility supplied with NetWare Connect to warn a
  708.       remote dialup user when programs are about to be loaded slowly over
  709.       the modem link.
  710. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  711. Note:    on return, verify that it is NETWARN responding by examining signature
  712.       at in NETWARN's data table in the resident segment (see #2672)
  713. SeeAlso: AX=C000h"ODI",AX=C000h"NESL"
  714.  
  715. Format of NETWARN Configuration structure:
  716. Offset    Size    Description    (Table 2672)
  717.  103h 7 BYTEs    signature string "NETWARN"
  718.  10Ah    BYTE    major version in ASCII (="1")
  719.  10Bh    BYTE    minor version in ASCII (="0")
  720.  10Ch    DWORD    minimum size of EXE cared about in bytes (/S=xxxx)
  721.  110h    WORD    same value in kilobytes (see #2673 [bit 4])
  722.  112h    BYTE    multiplex code (AH value) actually being used
  723.  113h    WORD    options (see #2673)
  724.  115h    DWORD    INT 21h vector before NETWARN loaded
  725.  119h    DWORD    INT 2Fh vector before NETWARN loaded
  726.  11Dh 16 BYTEs    ASCIIZ local name of last device which was checked
  727.  12Dh 128 BYTEs ASCIIZ remote name of last device which was checked
  728. Note:    the specified offsets are from the start of the resident segment
  729.  
  730. Bitfields for NETWARN options:
  731. Bit(s)    Description    (Table 2673)
  732.  0    ??? (=0)
  733.  1    /U (Unload) selected (never in resident)
  734.  2    /E (Enabled) Will trap & check EXEC's
  735.  3    /D (Disabled) No EXEC checking done
  736.  4    /S (Size) was set (see #2672 [offsets 010Ch and 0110h])
  737.  5    /P (Path shown)
  738.  6    /H or /? (Help) (never in resident)
  739. SeeAlso: #2672
  740. --------f-2FC000-----------------------------
  741. INT 2F - FN32 32 character filename utilities - INSTALLATION CHECK
  742.     AX = C000h
  743. Return: AL = FFh if installed
  744.        ES:DI -> signature string "FN32 32CHAR TSR"
  745. Program: FN32 is a TSR which supports 32 character filenames under PC/MS-DOS
  746. Note:    the TSR intercepts INT 21 calls and performs filename substitution by
  747.       managing dictionary files in each directory which contains long
  748.       filenames
  749. --------M-2FC000-----------------------------
  750. INT 2F - QMR - INSTALLATION CHECK
  751.     AX = C000h
  752. Return: AL = FFh if installed
  753.         ES:DI -> signature string "QMR1!"
  754. Program: QMR (Cove Software, Quick Mouse Reset) monitors the mouse
  755.       service interrupt (int 33h) and substitutes a fast software
  756.       reset (mouse fn 21h) for the slow hardware reset (mouse fn 0).
  757. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  758. SeeAlso: AX=C001h"QMR",AX=C002h"QMR",AX=C003h"QMR"
  759. --------V-2FC000-----------------------------
  760. INT 2F - VGAsave v1.93 - INSTALLATION CHECK
  761.     AX = C000h
  762. Return: AL = FFh if installed
  763.         BX = segment of resident code
  764. Program: VGAsave is a freeware VGA-specific, mouse-aware screenblanker by Bill
  765.       Javurek
  766. Range:    AH=C0h to AH=FFh, selected by scanning for a free multiplex number
  767. Note:    the transient portion of VGAsave compares the first 38 bytes of the
  768.       resident code (addressed through BX) against its own copy of the
  769.       resident code to complete the installation check
  770. SeeAlso: INT 14/AX=AA01h,INT 2F/AH=93h
  771. Index:    screen saver;VGAsave
  772. --------V-2FC000-----------------------------
  773. INT 2F - AD-DOS - INSTALLATION CHECK
  774.     AX = C000h
  775. Return: AL = FFh if installed
  776.         BX = 4144h ('AD')
  777.         CX = 2D44h ('-D')
  778.         DX = 4F53h ('OS')
  779. Program: AD-DOS is the DOS version of the After Dark screen blanker for
  780.       MS Windows
  781. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  782. SeeAlso: AX=C001h"AD-DOS",AX=C003h"AD-DOS",AX=C005h"AD-DOS",AX=C007h"AD-DOS"
  783. SeeAlso: AX=C009h"AD-DOS",AX=C020h"AD-DOS",INT 14/AX=AA01h
  784. Index:    screen saver;AD-DOS
  785. --------U-2FC000-----------------------------
  786. INT 2F U - WANG_ER.COM - INSTALLATION CHECK
  787.     AX = C000h
  788. Return: AL = FFh if installed
  789.         ES = segment of resident code
  790. Program: WANG_ER is a TSR from Compaq which permits Compaq systems equipped
  791.       with 3-mode floppy drives to read Wang document diskettes
  792. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  793. Note:    The installation check is completed by comparing the resident code
  794.       with the copy in the transient program
  795. --------i-2FC000-----------------------------
  796. INT 2F O - ASPIHOOK.SYS - INSTALLATION CHECK
  797.     AX = C000h
  798. Return: AL = FFh if multiplex number in use
  799.         ES:DI -> ASCIZ signature "ASPIHOOK" if ASPIHOOK.SYS installed
  800. Program: ASPIHOOK is a device driver for monitoring SCSI activity through an
  801.       ASPI host manager; it is part of the Personal Measure system
  802.       activity monitor from Spirit of Performance, Inc.
  803. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  804. SeeAlso: AX=C000h"PMEASURE"
  805. --------i-2FC000-----------------------------
  806. INT 2F - PMEASURE.EXE - INSTALLATION CHECK
  807.     AX = C000h
  808. Return: AL = FFh if multiplex number in use
  809.         ES:DI -> ASCIZ signature "PMEASURE.EXE" if PMEASURE.EXE installed
  810. Program: PMEASURE.EXE is a TSR for monitoring system hardware activity which
  811.       is part of the Personal Measure system activity monitor from Spirit
  812.       of Performance, Inc.
  813. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  814. Note:    If a Personal Measure Hook Module, such as ASPIHOOK.SYS, is already
  815.       installed, PMEASURE.EXE uses the next highest free multiplex number.
  816. SeeAlso: AX=C000h"ASPIHOOK",AX=C000h"PERSONAL MEASURE"
  817. --------i-2FC000-----------------------------
  818. INT 2F - PERSONAL MEASURE - HOOK MODULE INSTALLATION CHECK
  819.     AX = C000h
  820. Return: AL = FFh if installed
  821.     ES:DI -> signature string "PMEASUREHOOK"
  822.     AX = C000 if not installed, per mux id conventions
  823.     DH = major release number (binary)
  824.     DL = minor release number (binary)
  825. Program: The Personal Measure system activity monitor from Spirit of
  826.       Performance, Inc. uses an extensible series of modules to hook
  827.       into various operating system interfaces and monitor system calls.
  828.       Current hook modules are ASPIHOOK.SYS for ASPI device activity
  829.       and CDRHOOK.SYS for non-ASPI CD-ROM activity.     All hook modules
  830.       share the same mux id.
  831. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  832. SeeAlso: AX=C000h"PMEASURE.EXE",AX=C001h"PERSONAL MEASURE"
  833. --------c-2FC000-----------------------------
  834. INT 2F U - PrintCache v3.1 PCACHE.EXE - INSTALLATION CHECK
  835.     AX = C000h
  836. Return: AL = FFh if installed
  837.         SI = signature value 20D6h
  838.         DI = signature value 8761h
  839.         ES:BX -> configuration table (see #2674)
  840.         CX = ??? (0300h)
  841.         DX = ??? (0020h)
  842. Program: PCACHE is the resident print spooler portion of PrintCache by
  843.       LaserTools; it may use either memory or disk space to spool output
  844. Range:    AH=C0h to AH=FFh, selected by commandline switch
  845. SeeAlso: AX=0100h/SI=20D6h,AX=C001h"PCACHE"
  846.  
  847. Format of PrintCache configuration table:
  848. Offset    Size    Description    (Table 2674)
  849.  00h 26 BYTEs    ASCIZ signature string "TORQ Configuration Table: "
  850.  1Ah  2 BYTEs    ???
  851.  1Ch    DWORD    -> data table (see #2675)
  852.  20h  4 BYTEs    ASCIZ version string ("3.1" for v3.1)
  853.  24h  5 BYTEs    ???
  854.  29h 12 BYTEs    ASCIZ version date string ("Aug 31 1993" for v3.1)
  855.  35h    WORD    buffered port type (01h = LPT, 02h = COM)
  856.  37h    WORD    buffered port BIOS port number
  857.  39h  5 BYTEs    ASCIZ buffered port name ("LPTn" or "COMn")
  858.  3Eh    WORD    physical port type (01h = LPT, 02h = COM)
  859.  40h    WORD    physical port BIOS port number
  860.  42h  5 BYTEs    ASCIZ physical port name ("LPTn" or "COMn")
  861.  47h    BYTE    port driver IRQ
  862.  48h 21 BYTEs    ???
  863.  5Dh    WORD    buffer size in K
  864.  5Fh 27 BYTEs    ???
  865.  7Ah    BYTE    popup hotkey shift states (see #0499 at INT 16/AH=02h)
  866.  7Bh    BYTE    popup hotkey scan code (see #0005 at INT 09"IRQ1")
  867.  7Ch  4 BYTEs    ???
  868.  80h 20 BYTEs    ASCIZ printer type name
  869.     ???
  870.  
  871. Format of PrintCache data table:
  872. Offset    Size    Description    (Table 2675)
  873.  00h  2 BYTEs    ???
  874.  02h    DWORD    -> ??? entry point
  875.     ???
  876. --------U-2FC000-----------------------------
  877. INT 2F - Frank Kintrup TSR Utilities - INSTALLATION CHECK
  878.     AX = C000h
  879. Return: AL = FFh if installed
  880.         BX = program ID (see #2676)
  881.         CX = 464Bh (signature "FK")
  882.         DX = revision number (DH = major, DL = minor)
  883.         ES = resident segment of TSR
  884. Range:    AH=C0h to AH=FFh, selected by searching for a free multiplex number
  885. SeeAlso: AX=C001h"Kintrup",AX=C002h"Kintrup"
  886.  
  887. (Table 2676)
  888. Values for Frank Kintrup TSR program ID:
  889.  4153h    "AS"    ASCII.COM    ASCII table with paste function
  890.  434Ch    "CL"    CLOCK.COM    clock with date/time display and alarm
  891.  5043h    "PC"    PCALC.COM    programmer's calculator with paste function
  892.  5343h    "SC"    SCRSAVE.COM    screen saver with mouse support and hotkey
  893.  5544h    "UD"    UNDEL.COM    undelete program like SMARTCAN or DPROTECT
  894. --------K-2FC000-----------------------------
  895. INT 2F U - HP 100LX/200LX - PUSHKEYS - INSTALLATION CHECK
  896.     AX = C000h
  897. Return: AL = FFh if possibly installed
  898. Range:    AH=C0h to AH=FFh, selected by scanning for signature with AL=AEh
  899. SeeAlso: AX=C001h"HP 100LX",AX=C0AEh"HP 100LX",AX=C0AFh"HP 100LX"
  900. --------V-2FC000-----------------------------
  901. INT 2F - DIMWIT - INSTALLATION CHECK
  902.     AX = C000h
  903. Return: AL = FFh if installed
  904.         ES:DI -> signature string "DIMDOS" or "DIMWIN"
  905. Program: DIMWIT is a freeware Windows-aware screen blanker by Larry Board
  906. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  907. SeeAlso: AX=C000h"AD-DOS",AX=C001h"DIMWIT"
  908. Index:    screen saver;DIMWIT
  909. --------F-2FC000BX444B-----------------------
  910. INT 2F - MTEZ XpressFax Hardware TSR (CLASS2) - INSTALLATION CHECK
  911.     AX = C000h
  912.     BX = 444Bh ('DK')
  913.     CX = 4A4Eh ('AN')
  914. Return: AL = status
  915.         00h not installed, OK to install
  916.         FFh installed
  917.         BX = 646Bh ('dk')
  918.         CX = 6A6Eh ('an')
  919. Range:    AH=C0h to AH=FFh, selected automatically
  920. SeeAlso: AH=C0h"MTEZ"
  921. --------V-2FC000-----------------------------
  922. INT 2F U - TSENGP.COM - INSTALLATION CHECK
  923.     AX = C000h
  924. Return: AL = status
  925.         00h not installed, OK to install
  926.         FFh installed
  927.         DS = segment of resident code
  928. Program: TSENGP.COM is a TSR supplied by Compaq to fix an incompatibility
  929.       between some applications and Tseng ET4000-based video adapters
  930. Range:    AH=C0h to AH=FFh, selected automatically
  931. Note:    the installation check is completed by comparing the first eleven
  932.       bytes at DS:005Fh against the TSR's code (80h FCh 06h 74h 0Ah
  933.       80h FCh 07h 74h 05h EAh)
  934. --------N-2FC000-----------------------------
  935. INT 2F U - LapLink RemoteAccess (LLRA) - INSTALLATION CHECK
  936.     AX = C000h
  937. Return: AL = FFh if one of the components is installed
  938.     CX:BX -> signature within LLRA component:
  939.         "TSI_LapLinkCore" for LLRA1.EXE
  940.         "TSI_Blackbird"   for LLRA2.EXE
  941.         "TSI_Redirector"  for LLRA3.EXE
  942.         "TSI_Compression" for LLRA4.EXE
  943.     DL = major version number
  944.     DH = minor version number
  945. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  946. Note:    LapLink components are installed in the order listed above, but not
  947.       necessarily all four; each gets its own multiplex number (default
  948.       C0h-C3h)
  949. SeeAlso: AX=C002h"LapLink",AX=C205h"LapLink",AX=C2F0h"LapLink"
  950. SeeAlso: AX=C2F1h"LapLink",AX=C301h"LapLink",AX=C3F0h"LapLink"
  951. SeeAlso: AX=C3F1h"LapLink"
  952. --------M-2FC001-----------------------------
  953. INT 2F - QMR - REQUEST HARDWARE RESET
  954.     AX = C001h
  955. Return: ES = QMR code segment
  956.     AL destroyed
  957. Desc:    this function is used to force a full mouse reset when QMR is installed
  958. SeeAlso: AX=C000h"QMR",AX=C002h"QMR"
  959. --------V-2FC001-----------------------------
  960. INT 2F - DIMWIT - GET CONFIGURATION DATA
  961.     AX = C001h
  962. Return: ES:DI -> TSR configuration data (see #2677)
  963. Program: DIMWIT is a freeware Windows-aware screen blanker by Larry Board
  964. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  965. SeeAlso: AX=C000h"DIMWIT",AX=C001h"AD-DOS"
  966. Index:    screen saver;DIMWIT
  967.  
  968. Format of DIMWIT TSR configuration data:
  969. Offset    Size    Description    (Table 2677)
  970.  00h    WORD    blanking delay in clock ticks
  971.  02h    BYTE    instant-blanking hotkey scan code (see #0005)
  972.         Ctrl and Alt must also be pressed
  973. --------V-2FC001ES0000-----------------------
  974. INT 2F - AD-DOS - GET RESIDENT CODE SEGMENT
  975.     AX = C001h
  976.     ES = 0000h
  977. Return: AL = 00h if successful
  978.         ES = AD-DOS TSR Code Segment
  979. SeeAlso: AX=C000h"AD-DOS",AX=C001h"DIMWIT"
  980. Index:    screen saver;AD-DOS
  981. --------c-2FC001-----------------------------
  982. INT 2F U - PrintCache v3.1 PCACHE.EXE - GET ENTRY POINTS
  983.     AX = C001h
  984. Return: AL = FFh if installed
  985.         ES:BX -> ???
  986.         ES:DX -> ???
  987.         ES:SI -> ???
  988.         ES:DI -> ??? (equivalent to AX=C002h)
  989. SeeAlso: AX=C000h"PCACHE",AX=C002h"PCACHE"
  990. --------U-2FC001-----------------------------
  991. INT 2F - Frank Kintrup TSR Utilities - CLOCK - DISABLE DISPLAY UPDATE
  992.     AX = C001h
  993. Range:    AH=C0h to AH=FFh, selected by searching for a free multiplex number
  994. SeeAlso: AX=C000h"Kintrup",AX=C002h"Kintrup"
  995. --------K-2FC001CX03FB-----------------------
  996. INT 2F U - HP 100LX/200LX - PUSHKEYS - INTERNAL - UNINSTALL
  997.     AX = C001h
  998.     CX = 03FBh return address to continue uninstall if possible
  999. Return: program uninstalled
  1000. Range:    AH=C0h to AH=FFh, selected by scanning for signature with AL=AEh
  1001. SeeAlso: AX=C000h"HP 100LX",AX=C0AEh"HP 100LX",AX=C0AFh"HP 100LX"
  1002. --------i-2FC001-----------------------------
  1003. INT 2F - PERSONAL MEASURE - PASS PARAMETERS TO HOOK MODULE(S)
  1004.     AX = C001h
  1005.     DX = segment of PMEASURE.EXE or 0000h
  1006.     BX = offset in PMEASURE.EXE or 0000h
  1007.     CX = offset in PMEASURE.EXE or 0000h
  1008. Return: None
  1009. Program: PMEASURE.EXE is a TSR for monitoring system hardware activity which
  1010.       is part of the Personal Measure system activity monitor from Spirit
  1011.       of Performance, Inc.    PMEASURE uses this call to inform its hook
  1012.       modules whether or not it is running and to pass information about
  1013.       shared data and procedures.
  1014. Warning: This information documents a function that is private to Personal
  1015.       Measure and is provided as information only.    It should NOT be called
  1016.       by any software other than Personal Measure.
  1017. SeeAlso: AX=C000h"PERSONAL MEASURE"
  1018. --------V-2FC002-----------------------------
  1019. INT 2F - AD-DOS - CHECK FOR NEW INPUT
  1020.     AX = C002h
  1021. Return: AL = 00h if successful
  1022.         BX = status
  1023.         0000h no input since last check
  1024.         0001h new input available
  1025. Note:    this call also resets the new-input flag
  1026. SeeAlso: AX=C000h"AD-DOS",AX=C004h
  1027. Index:    screen saver;AD-DOS
  1028. --------M-2FC002-----------------------------
  1029. INT 2F - QMR - DISABLE QMR
  1030.     AX = C002h
  1031. Return: ES = QMR code segment
  1032.     AL destroyed
  1033. Desc:    this call temporarily disables QMR
  1034. SeeAlso: AX=C000h"QMR",AX=C003h"QMR"
  1035. --------c-2FC002-----------------------------
  1036. INT 2F U - PrintCache v3.1 PCACHE.EXE - GET BUFFER SIZE
  1037.     AX = C002h
  1038. Return: AX = ??? in K
  1039.     BX = size of print buffer in K
  1040. Program: PCACHE is the resident print spooler portion of PrintCache by
  1041.       LaserTools; it may use either memory or disk space to spool output
  1042. SeeAlso: AX=C000h"PCACHE"
  1043. --------U-2FC002-----------------------------
  1044. INT 2F - Frank Kintrup TSR Utilities - CLOCK - ENABLE DISPLAY UPDATE
  1045.     AX = C002h
  1046. Range:    AH=C0h to AH=FFh, selected by searching for a free multiplex number
  1047. SeeAlso: AX=C000h"Kintrup",AX=C002h"Kintrup"
  1048. --------N-2FC002-----------------------------
  1049. INT 2F U - LapLink RemoteAccess (LLRA) - Core - ???
  1050.     AX = C002h
  1051.     details not yet available
  1052. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  1053. SeeAlso: AX=C000h"LapLink",AX=C002h"LapLink",AX=C2F0h"LapLink"
  1054. SeeAlso: AX=C2F1h"LapLink",AX=C301h"LapLink"
  1055. --------V-2FC003-----------------------------
  1056. INT 2F - AD-DOS - SET MINUTES TO WAIT
  1057.     AX = C003h
  1058.     BX = minutes to wait before blanking screen
  1059. Return: AL = 00h if successful
  1060. Program: AD-DOS is the DOS version of the After Dark screen blanker for
  1061.       MS Windows
  1062. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  1063. Note:    this call also resets the delay timer
  1064. SeeAlso: AX=C000h"AD-DOS",AX=C004h
  1065. Index:    screen saver;AD-DOS
  1066. --------M-2FC003-----------------------------
  1067. INT 2F - QMR - ENABLE QMR
  1068.     AX = C003h
  1069. Return: ES = QMR code segment
  1070.     AL destroyed
  1071. Desc:    this call enables QMR after it has been disabled
  1072. SeeAlso: AX=C000h"QMR",AX=C002h"QMR"
  1073. --------c-2FC003-----------------------------
  1074. INT 2F U - PrintCache v3.1 PCACHE.EXE - SET ??? FLAG
  1075.     AX = C003h
  1076. Return: BX destroyed
  1077. SeeAlso: AX=C004h"PCACHE"
  1078. --------V-2FC004-----------------------------
  1079. INT 2F - AD-DOS - GET MINUTES TO WAIT
  1080.     AX = C004h
  1081. Return: AL = 00h if successful
  1082.         BX = minutes to wait before blanking screen
  1083. SeeAlso: AX=C000h"AD-DOS",AX=C003h"AD-DOS"
  1084. Index:    screen saver;AD-DOS
  1085. --------c-2FC004-----------------------------
  1086. INT 2F U - PrintCache v3.1 PCACHE.EXE - CLEAR ??? FLAG
  1087.     AX = C004h
  1088. Return: BX destroyed
  1089. SeeAlso: AX=C003h"PCACHE"
  1090. --------V-2FC005-----------------------------
  1091. INT 2F - AD-DOS - SET BLANKER STATUS
  1092.     AX = C005h
  1093.     BX = new state (0000h inactive, 0001h active) (default 0001h)
  1094. Return: AL = 00h if successful
  1095. SeeAlso: AX=C006h"AD-DOS"
  1096. Index:    screen saver;AD-DOS
  1097. --------c-2FC005-----------------------------
  1098. INT 2F U - PrintCache v3.1 PCACHE.EXE - ???
  1099.     AX = C005h
  1100.     ???
  1101. Return: BX destroyed
  1102.     ???
  1103. Program: PCACHE is the resident print spooler portion of PrintCache by
  1104.       LaserTools; it may use either memory or disk space to spool output
  1105. Range:    AH=C0h to AH=FFh, selected by commandline switch
  1106. SeeAlso: AX=C000h"PCACHE"
  1107. --------V-2FC006-----------------------------
  1108. INT 2F - AD-DOS - GET BLANKER STATUS
  1109.     AX = C006h
  1110. Return: AL = 00h if successful
  1111.         BX = current state of screen blanker (0000h inactive, 0001h active)
  1112. Program: AD-DOS is the DOS version of the After Dark screen blanker for
  1113.       MS Windows
  1114. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  1115. SeeAlso: AX=C000h"AD-DOS",AX=C005h"AD-DOS"
  1116. Index:    screen saver;AD-DOS
  1117. --------c-2FC006-----------------------------
  1118. INT 2F U - PrintCache v3.1 PCACHE.EXE - ???
  1119.     AX = C006h
  1120.     ???
  1121. Return: BX destroyed
  1122.     ???
  1123. Note:    this function appears to be identical to AX=C007h
  1124. SeeAlso: AX=C000h"PCACHE",AX=C007h"PCACHE"
  1125. --------V-2FC007-----------------------------
  1126. INT 2F - AD-DOS - SET HOT KEY
  1127.     AX = C007h
  1128.     BX = hot key
  1129.     CL = hot key shift status
  1130. Return: AL = 00h if successful
  1131. SeeAlso: AX=C008h"AD-DOS"
  1132. Index:    screen saver;AD-DOS
  1133. --------c-2FC007-----------------------------
  1134. INT 2F U - PrintCache v3.1 PCACHE.EXE - ???
  1135.     AX = C007h
  1136.     ???
  1137. Return: BX destroyed
  1138.     ???
  1139. Note:    this function appears to be identical to AX=C006h
  1140. SeeAlso: AX=C000h"PCACHE",AX=C006h"PCACHE"
  1141. --------V-2FC008-----------------------------
  1142. INT 2F - AD-DOS - GET CURRENT HOT KEY
  1143.     AX = C008h
  1144. Return: AX = status
  1145.         0000h successful
  1146.         BX = Hot Key
  1147.         CL = Hot Key Shift Status
  1148.         0008h otherwise
  1149. SeeAlso: AX=C000h"AD-DOS",AX=C007h"AD-DOS"
  1150. Index:    screen saver;AD-DOS
  1151. --------c-2FC008-----------------------------
  1152. INT 2F U - PrintCache v3.1 PCACHE.EXE - CLEAR ??? FLAG
  1153.     AX = C008h
  1154. Return: BX destroyed
  1155. SeeAlso: AX=C000h"PCACHE",AX=C009h"PCACHE"
  1156. --------V-2FC009-----------------------------
  1157. INT 2F - AD-DOS - UNBLANK MONITOR
  1158.     AX = C009h
  1159. Return: AL = 00h if successful
  1160. Program: AD-DOS is the DOS version of the After Dark screen blanker for
  1161.       MS Windows
  1162. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  1163. Note:    this function works by simulating keyboard activity
  1164. Index:    screen saver;AD-DOS
  1165. --------c-2FC009-----------------------------
  1166. INT 2F U - PrintCache v3.1 PCACHE.EXE - SET ??? FLAG
  1167.     AX = C009h
  1168. Return: BX destroyed
  1169. Program: PCACHE is the resident print spooler portion of PrintCache by
  1170.       LaserTools; it may use either memory or disk space to spool output
  1171. Range:    AH=C0h to AH=FFh, selected by commandline switch
  1172. SeeAlso: AX=C000h"PCACHE",AX=C008h"PCACHE"
  1173. --------V-2FC00A-----------------------------
  1174. INT 2F - AD-DOS - ???
  1175.     AX = C00Ah
  1176. Return: AX = status
  1177.         0000h successful
  1178.         BH = ??
  1179.         BL = ??
  1180.         000Ah failed
  1181. Index:    screen saver;AD-DOS
  1182. --------c-2FC00A-----------------------------
  1183. INT 2F U - PrintCache v3.1 PCACHE.EXE - ???
  1184.     AX = C00Ah
  1185.     ???
  1186. Return: AH = bit flags
  1187.         bit 5: ???
  1188.     AL = bit flags
  1189.         bit 4: ???
  1190.         bit 3: ???
  1191.     BX destroyed
  1192.     ???
  1193. SeeAlso: AX=C000h"PCACHE"
  1194. --------V-2FC00B-----------------------------
  1195. INT 2F - AD-DOS - ???
  1196.     AX = C00Bh
  1197. Return: AX = status
  1198.         0000h successful
  1199.         000Bh failed
  1200. Index:    screen saver;AD-DOS
  1201. --------c-2FC00B-----------------------------
  1202. INT 2F U - PrintCache v3.1 PCACHE.EXE - NOP
  1203.     AX = C00Bh
  1204. Return: BX destroyed
  1205. SeeAlso: AX=C000h"PCACHE"
  1206. --------V-2FC00C-----------------------------
  1207. INT 2F - AD-DOS - SET ??? INTERNAL FLAG TO 01h
  1208.     AX = C00Ch
  1209. Return: AX = status
  1210.         0000h successful
  1211.         000Ch failed
  1212. Program: AD-DOS is the DOS version of the After Dark screen blanker for
  1213.       MS Windows
  1214. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  1215. Index:    screen saver;AD-DOS
  1216. --------c-2FC00C-----------------------------
  1217. INT 2F U - PrintCache v3.1 PCACHE.EXE - GET ???
  1218.     AX = C00Ch
  1219. Return: AX = ??? (0000h)
  1220.     BX = ??? (0000h)
  1221.     CX = ??? (0100h)
  1222.     DL = ???
  1223.     DH = ???
  1224. SeeAlso: AX=C000h"PCACHE"
  1225. --------c-2FC00D-----------------------------
  1226. INT 2F U - PrintCache v3.1 PCACHE.EXE - SET ???
  1227.     AX = C00Dh
  1228.     DL = ???
  1229. Return: BX destroyed
  1230. Program: PCACHE is the resident print spooler portion of PrintCache by
  1231.       LaserTools; it may use either memory or disk space to spool output
  1232. Range:    AH=C0h to AH=FFh, selected by commandline switch
  1233. SeeAlso: AX=C000h"PCACHE"
  1234. --------V-2FC00E-----------------------------
  1235. INT 2F - AD-DOS - SET PASSWORD STATUS
  1236.     AX = C00Eh
  1237.     BX = new state (0000h disabled, 0001h enabled)
  1238. Return: ???
  1239. SeeAlso: AX=C000h"AD-DOS",AX=C00Fh"AD-DOS"
  1240. Index:    screen saver;AD-DOS
  1241. --------c-2FC00E-----------------------------
  1242. INT 2F U - PrintCache v3.1 PCACHE.EXE - INSTALL ???
  1243.     AX = C00Eh
  1244.     ES:DX -> ???
  1245. Return: BX destroyed
  1246. Note:    ES:DX is stored internally if the variable is currently 0000h:0000h,
  1247.       but ignored if already set; a counter is incremented
  1248. SeeAlso: AX=C000h"PCACHE",AX=C00Fh"PCACHE"
  1249. --------V-2FC00F-----------------------------
  1250. INT 2F - AD-DOS - GET PASSWORD STATUS
  1251.     AX = C00Fh
  1252. Return: BX = current state (0000h disabled, 0001h enabled)
  1253. SeeAlso: AX=C00Eh"AD-DOS"
  1254. Index:    screen saver;AD-DOS
  1255. --------c-2FC00F-----------------------------
  1256. INT 2F U - PrintCache v3.1 PCACHE.EXE - REMOVE ???
  1257.     AX = C00Fh
  1258. Return: BX destroyed
  1259. Note:    this function decrements the counter used by AX=C00Eh, and clears the
  1260.       internal pointer variable to 0000h:0000h when it reaches zero
  1261. SeeAlso: AX=C000h"PCACHE",AX=C00Eh"PCACHE"
  1262. --------c-2FC010-----------------------------
  1263. INT 2F U - PrintCache v3.1 PCACHE.EXE - GET ???
  1264.     AX = C010h
  1265.     CX = index of ??? table (00h-02h, others treated as 00h)
  1266.     SI = offset into data table
  1267. Return: AL = byte at specified offset into table
  1268.     BX destroyed
  1269. SeeAlso: AX=C000h"PCACHE"
  1270. --------c-2FC011-----------------------------
  1271. INT 2F U - PrintCache v3.1 PCACHE.EXE - GET ???
  1272.     AX = C011h
  1273. Return: AX = ??? (0007h)
  1274.     BX = ??? (0001h)
  1275.     CH = ???
  1276.     CL = ???
  1277. SeeAlso: AX=C000h"PCACHE"
  1278. --------c-2FC012-----------------------------
  1279. INT 2F U - PrintCache v3.1 PCACHE.EXE - GET ???
  1280.     AX = C012h
  1281. Return: AX = ???
  1282.     BX = ???
  1283.     CX = ???
  1284.     DX = ???
  1285. SeeAlso: AX=C000h"PCACHE"
  1286. --------c-2FC013-----------------------------
  1287. INT 2F U - PrintCache v3.1 PCACHE.EXE - ???
  1288.     AX = C013h
  1289.     ???
  1290. Return: BX destroyed
  1291.     ???
  1292. Program: PCACHE is the resident print spooler portion of PrintCache by
  1293.       LaserTools; it may use either memory or disk space to spool output
  1294. Range:    AH=C0h to AH=FFh, selected by commandline switch
  1295. SeeAlso: AX=C000h"PCACHE"
  1296. --------c-2FC014-----------------------------
  1297. INT 2F U - PrintCache v3.1 PCACHE.EXE - ???
  1298.     AX = C014h
  1299.     ???
  1300. Return: BX destroyed
  1301.     ???
  1302. SeeAlso: AX=C000h"PCACHE"
  1303. --------c-2FC015-----------------------------
  1304. INT 2F U - PrintCache v3.1 PCACHE.EXE - ???
  1305.     AX = C015h
  1306.     ???
  1307. Return: BX destroyed
  1308.     ???
  1309. SeeAlso: AX=C000h"PCACHE"
  1310. --------c-2FC016-----------------------------
  1311. INT 2F U - PrintCache v3.1 PCACHE.EXE - INCREMENT ???
  1312.     AX = C016h
  1313. Return: BX destroyed
  1314. SeeAlso: AX=C000h"PCACHE",AX=C017h"PCACHE"
  1315. --------c-2FC017-----------------------------
  1316. INT 2F U - PrintCache v3.1 PCACHE.EXE - DECREMENT ???
  1317.     AX = C017h
  1318. Return: BX destroyed
  1319. SeeAlso: AX=C000h"PCACHE",AX=C016h"PCACH"
  1320. --------c-2FC018-----------------------------
  1321. INT 2F U - PrintCache v3.1 PCACHE.EXE - ???
  1322.     AX = C018h
  1323.     ???
  1324. Return: BX destroyed
  1325.     ???
  1326. Note:    the first instruction of this function is an indirect jump which points
  1327.       at a RET by default
  1328. SeeAlso: AX=C000h"PCACHE",AX=C019h"PCACHE"
  1329. --------c-2FC019-----------------------------
  1330. INT 2F U - PrintCache v3.1 PCACHE.EXE - ???
  1331.     AX = C019h
  1332.     ???
  1333. Return: BX destroyed
  1334.     ???
  1335. Note:    the first instruction of this function is an indirect jump which points
  1336.       at a RET by default
  1337. SeeAlso: AX=C000h"PCACHE",AX=C018h"PCACHE"
  1338. --------c-2FC01A-----------------------------
  1339. INT 2F U - PrintCache v3.1 PCACHE.EXE - CLEAR ??? FLAG
  1340.     AX = C01Ah
  1341. Return: BX destroyed
  1342. SeeAlso: AX=C000h"PCACHE",AX=C01Bh"PCACHE"
  1343. --------c-2FC01B-----------------------------
  1344. INT 2F U - PrintCache v3.1 PCACHE.EXE - SET ??? FLAG
  1345.     AX = C01Bh
  1346. Return: BX destroyed
  1347. SeeAlso: AX=C000h"PCACHE",AX=C01Ah"PCACHE"
  1348. --------c-2FC01C-----------------------------
  1349. INT 2F U - PrintCache v3.1 PCACHE.EXE - ???
  1350.     AX = C01Ch
  1351.     ???
  1352. Return: AX = ???
  1353.     BX destroyed
  1354. SeeAlso: AX=C000h"PCACHE"
  1355. --------c-2FC01D-----------------------------
  1356. INT 2F U - PrintCache v3.1 PCACHE.EXE - NOP
  1357.     AX = C01Dh to C01Fh
  1358. Return: BX destroyed
  1359. Program: PCACHE is the resident print spooler portion of PrintCache by
  1360.       LaserTools; it may use either memory or disk space to spool output
  1361. Range:    AH=C0h to AH=FFh, selected by commandline switch
  1362. SeeAlso: AX=C000h"PCACHE"
  1363. --------V-2FC020-----------------------------
  1364. INT 2F - AD-DOS - GET AND RESET VxD API STATUS
  1365.     AX = C020h
  1366. Return: AL = 00h if successful
  1367.         BX = VxD API Status
  1368.         0000h no error
  1369.         0001h error
  1370.         0100h neither Windows 3.X enhanced mode nor Windows/386 2.x
  1371.               is running
  1372.         0200h VM API entry point not found (VxD not installed)
  1373. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  1374. Note:    this call resets the VxD API Status to zero
  1375. SeeAlso: AX=1602h,AX=1607h"CALL OUT API"
  1376. Index:    screen saver;AD-DOS
  1377. --------V-2FC04E-----------------------------
  1378. INT 2F - Explosiv v2.00+ - NON-TSR EXECUTING CHECK
  1379.     AX = C04Eh
  1380. Return: AL = 4Fh if Explosiv is running but not memory-resident
  1381. Program: Explosiv is a shareware animated screen blanker for DOS and Windows 3
  1382.       by H&G Software (Reidar Gresseth and Chris Hook)
  1383. Range:    AH=C0h to AH=C9h, selected by configuration
  1384. SeeAlso: AX=C050h
  1385. Index:    screen saver;Explosiv
  1386. --------V-2FC050-----------------------------
  1387. INT 2F - Explosiv v2.00+ - INSTALLATION CHECK
  1388.     AX = C050h
  1389. Return: AL = 51h if installed
  1390.     ---v3.0+ ---
  1391.         BX = interval in clock ticks
  1392.         CH = animation display color (00h mono, 01h tinge, 02h color)
  1393.         CL = animation delay factor
  1394.         DH = animation parameters
  1395.         DL = INT 10 checking (00h on, 01h off)
  1396.         SI = number of bytes available for animation code
  1397.         DI = display type (00h VGA, 01h EGA, 02h CGA, 03h HGC, 04h MDA)
  1398. Program: Explosiv is a shareware animated screen blanker for DOS and Windows 3
  1399.       by H&G Software (Reidar Gresseth and Chris Hook)
  1400. Range:    AH=C0h to AH=C9h, selected by configuration
  1401. SeeAlso: AH=93h,AX=C000h"AD-DOS",AX=C04Eh,AX=C052h,AX=C054h"v3"
  1402. SeeAlso: INT 14/AX=AA01h
  1403. Index:    screen saver;Explosiv
  1404. --------V-2FC052-----------------------------
  1405. INT 2F - Explosiv v2.00+ - UNINSTALL
  1406.     AX = C052h
  1407.     DX:BX = address to return to on successful uninstall
  1408. Return: at specified address if successful
  1409.     AL = 53h on error
  1410. Note:    specified return address must have the segment of the caller's PSP
  1411. SeeAlso: AX=C050h
  1412. Index:    screen saver;Explosiv
  1413. --------V-2FC054-----------------------------
  1414. INT 2F - Explosiv v2.x - GET ANIMATION DELAY FACTOR
  1415.     AX = C054h
  1416. Return: AL = delay factor
  1417. SeeAlso: AX=C057h
  1418. Index:    screen saver;Explosiv
  1419. --------V-2FC054-----------------------------
  1420. INT 2F - Explosiv v3.0+ - UPDATE PARAMETERS
  1421.     AX = C054h
  1422.     BX = new interval in clock ticks
  1423.     CH = animation display color (00h mono, 01h tinge, 02h color)
  1424.     CL = animation delay factor
  1425.     DH = animation parameters
  1426.     DL = INT 10 checking (00h on, 01h off)
  1427. SeeAlso: AX=C050h
  1428. Index:    screen saver;Explosiv
  1429. --------V-2FC055-----------------------------
  1430. INT 2F - Explosiv v2.x - SET BLANKING INTERVAL
  1431.     AX = C055h
  1432.     BX = new interval in clock ticks
  1433. Index:    screen saver;Explosiv
  1434. --------V-2FC056-----------------------------
  1435. INT 2F - Explosiv v2.x - SET ANIMATION DISPLAY TYPE
  1436.     AX = C056h
  1437.     BL = animated display type (00h mono, 01h color)
  1438. SeeAlso: AX=C058h"v2.x"
  1439. Index:    screen saver;Explosiv
  1440. --------V-2FC056-----------------------------
  1441. INT 2F - Explosiv v3.0+ - ENABLE/DISABLE EXPLOSIV
  1442.     AX = C056h
  1443.     BX = new state
  1444.         0000h disabled
  1445.         0100h enabled
  1446.         0101h enabled, but never blank
  1447.         0102h enabled, always blank
  1448. --------V-2FC057-----------------------------
  1449. INT 2F - Explosiv v2.x - SET ANIMATION DELAY FACTOR
  1450.     AX = C057h
  1451.     BL = delay factor
  1452. SeeAlso: AX=C054h"v2.x"
  1453. Index:    screen saver;Explosiv
  1454. --------V-2FC058-----------------------------
  1455. INT 2F - Explosiv v2.x - SET ANIMATION PARAMETER
  1456.     AX = C058h
  1457.     BL = animation parameter
  1458. Note:    the animation parameter has different interpretations for each display
  1459. SeeAlso: AX=C056h"v2.x"
  1460. Index:    screen saver;Explosiv
  1461. --------V-2FC058-----------------------------
  1462. INT 2F - Explosiv v3.0+ - LOAD NEW ANIMATION DISPLAY CODE
  1463.     AX = C058h
  1464.     BX = file handle for file containing display code
  1465.     CX = number of bytes to load
  1466.     DX = offset at which animation code should be loaded
  1467. Return: AL = status (see #2678)
  1468. Note:    if AL=00h-03h on return, the file will be closed
  1469. Index:    screen saver;Explosiv
  1470.  
  1471. (Table 2678)
  1472. Values for Explosiv function status:
  1473.  00h    successful
  1474.  01h    code too large to available space
  1475.  02h    no data read, load aborted
  1476.  03h    incomplete load, default blanking display loaded instead
  1477.  58h    unexpected offset in DX
  1478. --------V-2FC059-----------------------------
  1479. INT 2F - Explosiv v2.x - DISABLE EXPLOSIV
  1480.     AX = C059h
  1481. Note:    clears flag set by AX=C05Ah
  1482. SeeAlso: AX=C05Ah
  1483. Index:    screen saver;Explosiv
  1484. --------V-2FC05A-----------------------------
  1485. INT 2F u - Explosiv v2.x - ENABLE EXPLOSIV
  1486.     AX = C05Ah
  1487.     BL = ???
  1488. Note:    sets flag cleared by AX=C059h then stores BL
  1489. SeeAlso: AX=C059h,AX=C05Bh
  1490. Index:    screen saver;Explosiv
  1491. --------V-2FC05B-----------------------------
  1492. INT 2F - Explosiv v2.x - CHANGE ANIMATION DISPLAY
  1493.     AX = C05Bh
  1494.     BL = animation display
  1495. Note:    this function fails silently if the requested display is not in memory
  1496. SeeAlso: AX=C05Ah,AX=C05Ch
  1497. Index:    screen saver;Explosiv
  1498. --------V-2FC05C-----------------------------
  1499. INT 2F - Explosiv v2.x - SET INT 10 CHECKING
  1500.     AX = C05Ch
  1501.     BL = new state of INT 10 checking (00h enabled, 01h disabled)
  1502. SeeAlso: AX=C05Bh
  1503. Index:    screen saver;Explosiv
  1504. --------v-2FC080-----------------------------
  1505. INT 2F U - AMI IAM.SYS - INSTALL ??? CALLBACK
  1506.     AX = C080h
  1507.     CX:DX -> ??? callback
  1508.     DI = segment of ??? buffer (first WORD copied into IAM.SYS)
  1509. Program: IAM.SYS is the Illegal Activity Monitor portion of American
  1510.       Megatrends, Inc.'s PC-Defender anti-virus product
  1511. Note:    also sets ??? flag
  1512. SeeAlso: AX=C081h
  1513.  
  1514. Format of IAM.SYS buffer:
  1515. Offset    Size    Description    (Table 2679)
  1516.  00h    BYTE    ???
  1517.  01h    BYTE    ???
  1518.  02h  N BYTEs    ??? (ASCIZ strings)
  1519. --------v-2FC081-----------------------------
  1520. INT 2F U - AMI IAM.SYS - CLEAR ???
  1521.     AX = C081h
  1522. Desc:    clears the ??? flag that AX=C080h sets
  1523. SeeAlso: AX=C080h
  1524. --------K-2FC0AE-----------------------------
  1525. INT 2F U - HP 100LX/200LX - PUSHKEYS - INSTALLATION CHECK
  1526.     AX = C0AEh
  1527. Return: AX = 4453h if installed
  1528.     CX = 5259h if installed
  1529. Range:    AH=C0h to AH=FFh, selected by scanning for signature
  1530. SeeAlso: AX=C000h"HP 100LX",AX=C001h"HP 100LX",AX=C0AFh"HP 100LX"
  1531. --------K-2FC0AF-----------------------------
  1532. INT 2F U - HP 100LX/200LX - PUSHKEYS - INTERNAL - GET BUFFER ADDRESS
  1533.     AX = C0AFh
  1534. Return: ES:DI -> buffer (behind code)
  1535. Range:    AH=C0h to AH=FFh, selected by scanning for signature with AL=AEh
  1536. SeeAlso: AX=C000h"HP 100LX",AX=C001h"HP 100LX",AX=C0AEh"HP 100LX"
  1537. --------N-2FC100-----------------------------
  1538. INT 2F U - Personal NetWare - STPIPX v1.00 - INSTALLATION CHECK
  1539.     AX = C100h
  1540. Return: AL = FFh if installed
  1541.         ES:SI -> signature string "STP-IPX$"
  1542.         BX = version??? (0001h for v1.00)
  1543.         DI corrupted
  1544. Note:    AH=C1h is the default value; STPIPX probably scans a range of
  1545.       multiplex numbers to find a free one, as LSL does
  1546. SeeAlso: AX=C000h"LSL",AX=C101h
  1547. --------N-2FC101-----------------------------
  1548. INT 2F U - Personal NetWare - STPIPX v1.00 - UNINSTALL
  1549.     AX = C101h
  1550. Return: AL = status???
  1551.     BX corrupted
  1552. SeeAlso: AX=C101h
  1553. --------N-2FC205-----------------------------
  1554. INT 2F U - LapLink RemoteAccess (LLRA) - Redirector - ???
  1555.     AX = C205h
  1556.     details not yet available
  1557. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  1558. SeeAlso: AX=C000h"LapLink",AX=C002h"LapLink",AX=C2F0h"LapLink"
  1559. SeeAlso: AX=C2F1h"LapLink",AX=C301h"LapLink"
  1560. --------N-2FC2F0-----------------------------
  1561. INT 2F U - LapLink RemoteAccess (LLRA) - Redirector - ???
  1562.     AX = C2F0h
  1563.     details not yet available
  1564. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  1565. SeeAlso: AX=C000h"LapLink",AX=C002h"LapLink",AX=C205h"LapLink"
  1566. SeeAlso: AX=C2F1h"LapLink",AX=C301h"LapLink"
  1567. --------N-2FC2F1-----------------------------
  1568. INT 2F U - LapLink RemoteAccess (LLRA) - Redirector - ???
  1569.     AX = C2F1h
  1570.     details not yet available
  1571. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  1572. SeeAlso: AX=C000h"LapLink",AX=C002h"LapLink",AX=C205h"LapLink"
  1573. SeeAlso: AX=C2F0h"LapLink",AX=C301h"LapLink"
  1574. --------d-2FC300-----------------------------
  1575. INT 2F - SETWPR.COM - INSTALLATION CHECK
  1576.     AX = C300h
  1577. Return: AL = FFh if installed
  1578. Program: SETWPR is a hard-disk write-protection TSR by Jaroslaw Rafa
  1579. SeeAlso: AX=C302h"SETWPR"
  1580. --------k-2FC300DX0000-----------------------
  1581. INT 2F U - SpaceManager - INSTALLATION CHECK
  1582.     AX = C300h
  1583.     DX = 0000h
  1584. Return: AL = FFh if any SpaceManager programs installed
  1585.         BX = 6F73h
  1586.         CX = 6F68h
  1587. Program: SpaceManager is an enhancement for MS-DOS DoubleSpace by Vertisoft
  1588.       Systems, Inc.
  1589. Range:    AH=C3h to AH=FFh, selected by scanning for first free multiplex number
  1590. SeeAlso: AX=C300h/BX=4F53h
  1591. --------k-2FC300BX4F53-----------------------
  1592. INT 2F U - SpaceManager - INSTALLATION VERIFICATION
  1593.     AX = C300h
  1594.     BX = 4F53h ('OS')
  1595.     CX = 4F48h ('OH')
  1596.     DX = program identifier (see #2680) or 0666h for any SpaceManager prog
  1597. Return: AL = FFh if BX/CX as specified and specified program installed
  1598.         BX = 6F73h ('os')
  1599.         CX = 6F68h ('oh')
  1600. Range:    AH=C3h to AH=FFh, selected by scanning for first free multiplex number
  1601. Note:    this call is chained if BX,CX, or DX are not as specified above
  1602. SeeAlso: AX=C300h/DX=0000h
  1603.  
  1604. (Table 2680)
  1605. Values for SpaceManager program identifier:
  1606.  9000h    SMOUNT (SuperMount)
  1607.  9001h    SELECTC (SelectCompress)
  1608.  9002h    SUPERX (SuperExchange)
  1609.  9003h    FORTUNE (FortuneTeller)
  1610. --------k-2FC301-----------------------------
  1611. INT 2F U - SpaceManager - ???
  1612.     AX = C301h
  1613.     DX = program identifier (9000h,9001h,9003h) (see #2680)
  1614.     ???
  1615. Return: ???
  1616. --------N-2FC301-----------------------------
  1617. INT 2F U - LapLink RemoteAccess (LLRA) - Compression - ???
  1618.     AX = C301h
  1619.     details not yet available
  1620. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  1621. SeeAlso: AX=C000h"LapLink",AX=C002h"LapLink",AX=C205h"LapLink"
  1622. SeeAlso: AX=C2F0h"LapLink",AX=C3F0h"LapLink",AX=C3F1h"LapLink"
  1623. --------k-2FC302-----------------------------
  1624. INT 2F U - SpaceManager - ENABLE PROGRAM
  1625.     AX = C302h
  1626.     DX = program identifier (9000h,9001h,9003h) (see #2680)
  1627. Return: AX destroyed
  1628. SeeAlso: AX=C303h,AX=C306h
  1629. --------d-2FC302-----------------------------
  1630. INT 2F - SETWPR.COM - SET WRITE-PROTECTION STATE
  1631.     AX = C302h
  1632.     BL = new state
  1633.         00h disk may be written
  1634.         01h disk write-protected
  1635. Return: AL = FFh if installed
  1636. Program: SETWPR is a hard-disk write-protection TSR by Jaroslaw Rafa
  1637. SeeAlso: AX=C300h"SETWPR"
  1638. --------k-2FC303-----------------------------
  1639. INT 2F U - SpaceManager - DISABLE PROGRAM
  1640.     AX = C303h
  1641.     DX = program identifier (9000h,9001h,9003h) (see #2680)
  1642. Return: AX destroyed
  1643. SeeAlso: AX=C302h,AX=C306h
  1644. --------k-2FC304-----------------------------
  1645. INT 2F U - SpaceManager - GET PER-DRIVE ENABLEMENT TABLE
  1646.     AX = C304h
  1647.     DX = program identifier (9000h,9001h,9003h) (see #2680)
  1648. Return: ES:BX -> 26-byte drive table (00h disabled for drive, 01h enabled)
  1649.     AX destroyed
  1650. --------k-2FC305DX9003-----------------------
  1651. INT 2F U - SpaceManager - FORTUNE.EXE - NOP
  1652.     AX = C305h
  1653.     DX = 9003h
  1654. Return: AX destroyed
  1655. --------k-2FC305-----------------------------
  1656. INT 2F U - SpaceManager - ???
  1657.     AX = C305h
  1658.     DX = program identifier (9000h,9001h) (see #2680)
  1659.     ???
  1660. Return: ???
  1661. --------k-2FC306-----------------------------
  1662. INT 2F U - SpaceManager - CHECK WHETHER PROGRAM ENABLED
  1663.     AX = C306h
  1664.     DX = program identifier (9000h,9001h,9003h) (see #2680)
  1665. Return: AL = current state (00h disabled, FAh enabled)
  1666.     AH destroyed
  1667. SeeAlso: AX=C302h,AX=C303h
  1668. --------k-2FC307DX9001-----------------------
  1669. INT 2F U - SpaceManager - SELECTC - ???
  1670.     AX = C307h
  1671.     DX = 9001h
  1672.     BX = ???
  1673.     CX = ???
  1674.     ???
  1675. Return: ???
  1676. --------k-2FC308DX9001-----------------------
  1677. INT 2F U - SpaceManager - SELECTC - ???
  1678.     AX = C308h
  1679.     DX = 9001h
  1680.     ???
  1681. Return: ???
  1682. --------N-2FC3F0-----------------------------
  1683. INT 2F U - LapLink RemoteAccess (LLRA) - Compression - ???
  1684.     AX = C3F0h
  1685.     details not yet available
  1686. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  1687. SeeAlso: AX=C000h"LapLink",AX=C002h"LapLink",AX=C205h"LapLink"
  1688. SeeAlso: AX=C2F0h"LapLink",AX=C301h"LapLink",AX=C3F1h"LapLink"
  1689. --------N-2FC3F1-----------------------------
  1690. INT 2F U - LapLink RemoteAccess (LLRA) - Compression - ???
  1691.     AX = C3F1h
  1692.     details not yet available
  1693. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  1694. SeeAlso: AX=C000h"LapLink",AX=C002h"LapLink",AX=C205h"LapLink"
  1695. SeeAlso: AX=C2F0h"LapLink",AX=C301h"LapLink",AX=C3F0h"LapLink"
  1696. --------d-2FC64CBX5553-----------------------
  1697. INT 2F U - Smart Prompt - INSTALLATION CHECK
  1698.     AX = C64Ch
  1699.     BX = 5553h
  1700. Return: AX = 4CC6h if installed
  1701.     BX = 5355h if installed
  1702. Program: Smart Prompt (SMARTPMT) is a freeware TSR by Steve Gibson which
  1703.       forces an immediate flush of SmartDrive's (and compatible caches')
  1704.       buffers on returning to the DOS prompt
  1705. --------V-2FC700CX434C-----------------------
  1706. INT 2F u - COLAP - INSTALLATION CHECK
  1707.     AX = C700h
  1708.     CX = 434Ch  "CL"
  1709. Return: AL = FFh if installed
  1710. Program: colap.com is a freeware TSR by Eric Meyer which controls contrast
  1711.       and brightness of color laptops by changing the VGA palette colors;
  1712.       for Toshiba laptops there are more hotkeys for shutting off display
  1713.       and harddisk.
  1714. --------v-2FC900BP0000-----------------------
  1715. INT 2F U - ThunderByte??? - INSTALLATION CHECK
  1716.     AX = C900h
  1717.     BP = 0000h
  1718. Return: AL = FFh if installed
  1719.         BP >= 0014h
  1720. Note:    called by TBSCANX
  1721. SeeAlso: AX=C987h,AX=CA00h
  1722. --------v-2FC987-----------------------------
  1723. INT 2F U - ThunderByte??? - DISINFECT FILE???
  1724.     AX = C987h
  1725.     BX:DX -> filename
  1726.     BX:CX -> virus name
  1727. Return: AX = status
  1728.         0000h successful???
  1729. Note:    called by TBSCANX
  1730. SeeAlso: AX=CA00h
  1731. --------r-2FC9FF-----------------------------
  1732. INT 2F C - StackMan - INSTALLATION BROADCAST
  1733.     AX = C9FFh
  1734.     BL = BCD version number
  1735.     CX = number of stacks
  1736.     DX = stack size in bytes
  1737. Program: StackMan is a freeware stack manager by Franz Veldman of ESaSS B.V.
  1738.       which functions as a replacement for the DOS STACK= command as well
  1739.       as permitting multiple TSRs to share a pool of stack space
  1740. Notes:    called by StackMan when it goes resident to inform interested TSRs that
  1741.       its API is available
  1742.     the installation check consists of testing for the string "STACKXXX" at
  1743.       offset 0Ah from the INT B4 handler
  1744. SeeAlso: INT B4"StackMan",INT B5"StackMan"
  1745. Index:    installation check;STACKMAN|broadcasts;STACKMAN installation
  1746. --------F-2FCA-------------------------------
  1747. INT 2F - FAXPLUS - FAX TSR
  1748.     AH = CAh
  1749.     ???
  1750. Return: ???
  1751. Program: FAXTSR is a resident FAX send/receive module for FAXPLUS by Frans
  1752.       Veldman
  1753. SeeAlso: AH=2Ah"Gammafax"
  1754. --------v-2FCA00BX5442-----------------------
  1755. INT 2F - TBSCANX - INSTALLATION CHECK
  1756.     AX = CA00h
  1757.     BX = 5442h ('TB')
  1758. Return: AL = state
  1759.         00h not installed
  1760.         FFh installed
  1761.         BX = 7462h ('tb') if BX was 5442h on entry
  1762. Program: TBSCANX is a resident virus scanning module by Frans Veldman.
  1763. Note:    programs may perform virus checks on themselves, other program files,
  1764.       or their data files by invoking the TBSCANX API.
  1765. SeeAlso: AX=4653h/CX=0002h,AX=4653h/CX=0007h,AX=C900h
  1766. --------v-2FCA01-----------------------------
  1767. INT 2F - TBSCANX - GET STATUS
  1768.     AX = CA01h
  1769. Return: AH = BCD version number (v2.2+)
  1770.         CAh for versions before 2.2
  1771.     AL = state (00h = disabled, 01h = enabled)
  1772.     CX = number of signatures which will be searched
  1773. ---v2.0---
  1774.     BX = EMS handle, 0000h if not using EMS
  1775. ---v2.3+---
  1776.     BX = segment of swap area, 0000h if not swapped
  1777.     DX = EMS or XMS handle (XMS handle if BX=0000h), FFFFh if not using EMS
  1778. SeeAlso: AX=CA02h
  1779. --------v-2FCA02-----------------------------
  1780. INT 2F - TBSCANX - SET STATE
  1781.     AX = CA02h
  1782.     BL = new state (00h = disabled, 01h = enabled)
  1783. SeeAlso: AX=CA01h
  1784. --------v-2FCA03-----------------------------
  1785. INT 2F - TBSCANX - SCAN BUFFER
  1786.     AX = CA03h
  1787.     CX = size of buffer
  1788.     DS:DX -> buffer containing data to scan
  1789. Return: CF clear if no virus signatures found
  1790.         BX,ES destroyed
  1791.     CF set if signature found
  1792.         ES:BX -> ASCIZ virus name (v2.3+)
  1793.         DS:DX -> ASCIZ virus name (v2.0)
  1794.     AX,CX,DX destroyed (v2.3+)
  1795.     all other registers except CS:IP and SS:SP destroyed (v2.0)
  1796. SeeAlso: AX=CA04h
  1797. --------v-2FCA04-----------------------------
  1798. INT 2F - TBSCANX - SCAN FILE
  1799.     AX = CA04h
  1800.     DS:DX -> filename
  1801. Return: CF clear if no virus signatures found
  1802.         BX,ES destroyed
  1803.     CF set if signature found
  1804.         ES:BX -> ASCIZ virus name
  1805.     AX,CX,DX destroyed
  1806. Note:    this function requires at least 4K free memory
  1807. SeeAlso: AX=CA03h
  1808. --------U-2FCAFEBX0000-----------------------
  1809. INT 2F U - THELP v3.0 - INSTALLATION CHECK
  1810.     AX = CAFEh
  1811.     BX = 0000h
  1812. Return: BX = segment of resident code if installed
  1813.         0000h if not installed
  1814. SeeAlso: AX=5453h,INT 2D"AMIS"
  1815. --------F-2FCB00-----------------------------
  1816. INT 2F - Communicating Applications Specification - INSTALLATION CHECK
  1817.     AX = CB00h
  1818. Return: AL = status
  1819.         00h not installed, OK to install
  1820.         01h not installed, not OK to install
  1821.         FFh installed
  1822. Note:    AH = CBh is the default identifier, but may be reconfigured
  1823. SeeAlso: AH=2Ah,AX=8000h"FaxBIOS",AX=CB0Eh,AX=CBDCh
  1824. --------F-2FCB00BX4D53-----------------------
  1825. INT 2F - MTEZ XpressFax CASMGR - INSTALLATION CHECK
  1826.     AX = CB00h
  1827.     BX = 4D53h ('MS')
  1828.     CX = 4949h ('II')
  1829. Return: AL = status
  1830.         00h not installed, OK to install
  1831.         01h not installed, not OK to install
  1832.         FFh installed
  1833.         BX = 6D73h ('ms')
  1834.         CX = 6969h ('ii')
  1835. Note:    this function is equivalent to the standard CASMGR installation check,
  1836.       but uses the additional magic values to identify which CAS is
  1837.       installed
  1838. SeeAlso: AH=2Ah,AX=8000h"FaxBIOS",AX=C000h/BX=444Bh,AX=CB0Eh,AX=CB16h
  1839. --------F-2FCB01-----------------------------
  1840. INT 2F - Communicating Applications Specification - SUBMIT A TASK
  1841.     AX = CB01h
  1842.     DS:DX -> ASCIZ name of task control file
  1843. Return: AX >= 0: event handle
  1844.     AX < 0: two's complement of error code (see #2681)
  1845. Note:    files needed for an event must be kept until task is complete or error
  1846. SeeAlso: AX=CB0Bh,AX=CB15h
  1847.  
  1848. (Table 2681)
  1849. Values for CAS error code:
  1850.   (AH = class, AL = subcode, value passed back is 2's complement)
  1851.   Class 00h    --- FAX warnings
  1852.     Subcode 00h    no error
  1853.         02h    bad scanline count
  1854.         03h    page sent with errors, could not retransmit
  1855.         04h    received data lost
  1856.         05h    invalid or missing logo file
  1857.         06h    filename does not match nonstandard format (NSF) header
  1858.         07h    file size does not match NSF header
  1859.   Class 01h    --- DOS warnings (data was sent)
  1860.     Subcode 01h    invalid function
  1861.         05h    access denied
  1862.         06h    invalid handle
  1863.         others    see #1332 at INT 21/AH=59h/BX=0000h
  1864.   Class 02h    --- fatal errors (data not sent)
  1865.     Subcode 00h    multiplex handler failed
  1866.         01h    unknown command
  1867.         02h    bad event handle
  1868.         03h    FIND NEXT attempted before FIND FIRST
  1869.         04h    no more events
  1870.         07h    invalid queue type
  1871.         08h    bad control file
  1872.         09h    communication board busy
  1873.         0Ah    invalid command parameter
  1874.         0Bh    can't uninstall resident code
  1875.         0Ch    file exists
  1876.         80h    unknown task type
  1877.         81h    bad phone number
  1878.         82h    bad .PCX file header
  1879.         83h    unexpected EOF
  1880.         84h    unexpected disconnect
  1881.         85h    too many dialing retries
  1882.         86h    no file specified for send
  1883.         87h    communication board timeout
  1884.         88h    received too many pages (>1023) of data
  1885.         89h    manual connect initiated too long ago
  1886.         8Ah    hardware command set error
  1887.         8Bh    bad NonStandard Format (NSF) header file
  1888.   Class 03h    --- fatal DOS errors
  1889.     Subcode 02h    file not found
  1890.         03h    path not found
  1891.         others    see #1332 at INT 21/AH=59h/BX=0000h
  1892.   Class 04h    --- FAX errors
  1893.     Subcode 01h    remote unit not Group 3 compatible
  1894.         02h    remote unit did not send capabilities
  1895.         03h    other FAX machine incompatible
  1896.         04h    other FAX incapable of file transfers
  1897.         05h    exceeded retrain or FAX resend limit
  1898.         06h    line noise or failure to agree on bit rate
  1899.         07h    remote disconnected after receiving data
  1900.         08h    no response from remote after sending data
  1901.         09h    remote's capabilities incompatible
  1902.         0Ah    no dial tone (v1.2+)
  1903.         0Bh    invalid response from remote unit after sending data
  1904.         0Dh    phone line dead or remote unit disconnected
  1905.         0Eh    timeout while waiting for secondary dial tone (v1.2+)
  1906.         11h    invalid command from remote after receiving data
  1907.         15h    tried to receive from incompatible hardware
  1908.         5Ch    received data overflowed input buffer
  1909.         5Dh    remote unexpectedly stopped sending data
  1910.         5Eh    other FAX machine jammed (no data sent)
  1911.         5Fh    remote took too long to send fax scan line
  1912.         63h    can't get through to remote unit
  1913.         64h    user canceled event
  1914.   Class 05h    --- application-specific (v1.2+)
  1915.   ---Intel FAXPOP.EXE
  1916.     Subcode 00h    tried to send while in graphics mode
  1917.         01h    insufficient disk space
  1918.         02h    internal buffer overflow
  1919.   Class 06h    --- CAS implementation-specific (v1.2+)
  1920. --------F-2FCB02-----------------------------
  1921. INT 2F - Communicating Applications Specification - ABORT CURRENT EVENT
  1922.     AX = CB02h
  1923. Return: AX >= 0: event handle of aborted event
  1924.     AX < 0: error code (see #2681)
  1925. Note:    termination could take up to 30 seconds
  1926. SeeAlso: AX=CB08h,AX=CB10h
  1927. --------F-2FCB05-----------------------------
  1928. INT 2F - Communicating Applications Specification - FIND FIRST QUEUE ENTRY
  1929.     AX = CB05h
  1930.     CX = status of events to find
  1931.         0000h successful completion
  1932.         0001h waiting to be processed
  1933.         0002h number has been dialed
  1934.         0003h connection established, sending
  1935.         0004h connection established, receiving
  1936.         0005h event aborted
  1937.         FFFFh find any event, regardless of status
  1938.         other negative values, match error code
  1939.     DH = direction
  1940.         00h chronological order, earliest to latest
  1941.         01h reverse chronological order, latest to earliest
  1942.     DL = queue to search
  1943.         00h task queue
  1944.         01h receive queue
  1945.         02h log queue
  1946. Return: AX = 0000h successful
  1947.         BX = event handle for found event
  1948.     AX < 0       error code (see #2681)
  1949. SeeAlso: AX=CB06h,AX=CB07h
  1950. --------F-2FCB06-----------------------------
  1951. INT 2F - Communicating Applications Specification - FIND NEXT QUEUE ENTRY
  1952.     AX = CB06h
  1953.     DL = queue to search
  1954.         00h task queue
  1955.         01h receive queue
  1956.         02h log queue
  1957. Return: AX = 0000h successful
  1958.         BX = event handle for found event
  1959.     AX < 0       error code (see #2681)
  1960. Note:    direction of search is same as preceding FIND FIRST call
  1961. SeeAlso: AX=CB05h
  1962. --------F-2FCB07-----------------------------
  1963. INT 2F - Communicating Applications Specification - OPEN FILE
  1964.     AX = CB07h
  1965.     BX = event handle from find (AL=05h,06h) or submit task (AL=01h)
  1966.     CX = receive file number (ignored for task queue and log queue)
  1967.         0000h  open receive control file
  1968.         N       open Nth received data file
  1969.     DL = queue
  1970.         00h task queue
  1971.         01h receive queue control file or received file, as given by CX
  1972.         02h log queue
  1973.         03h group file in task queue (v1.2+)
  1974.         04h group file in log queue (v1.2+)
  1975. Return: AX = 0000h successful
  1976.         BX = DOS file handle for requested file
  1977.     AX < 0       error code (see #2681)
  1978. Note:    the returned file handle has been opened in read-only mode and should
  1979.       be closed with INT 21/AH=3Eh after use
  1980. SeeAlso: AX=CB01h,AX=CB05h,AX=CB14h
  1981. --------F-2FCB08-----------------------------
  1982. INT 2F - Communicating Applications Specification - DELETE FILE
  1983.     AX = CB08h
  1984.     BX = event handle
  1985.     CX = receive file number
  1986.         0000h delete ALL received files and receive control file
  1987.         N      delete Nth received file
  1988.     DL = queue
  1989.         00h delete control file in task queue and corresponding group file
  1990.           if it exists
  1991.         01h delete file in receive queue, as given by CX
  1992.         02h delete control file in log queue (individual deletions not
  1993.           recommended, to maintain integrity of log) and corresponding
  1994.           group file if it exists
  1995. Return: AX = 0000h successful
  1996.     AX < 0       error code (see #2681)
  1997. SeeAlso: AX=CB02h,AX=CB09h
  1998. --------F-2FCB09-----------------------------
  1999. INT 2F - Communicating Applications Specification - DELETE ALL FILES IN Q
  2000.     AX = CB09h
  2001.     DL = queue
  2002.         00h delete all control files in task queue, including all group
  2003.           files
  2004.         01h delete all files in receive queue
  2005.         02h delete all control files in log queue, including all group
  2006.           files
  2007. Return: AX = 0000h successful
  2008.     AX < 0       error code (see #2681)
  2009. SeeAlso: AX=CB08h
  2010. --------F-2FCB0A-----------------------------
  2011. INT 2F - Communicating Applications Specification - GET EVENT DATE
  2012.     AX = CB0Ah
  2013.     BX = event handle
  2014.     DL = queue
  2015.         00h task queue
  2016.         01h receive queue
  2017.         02h log queue
  2018. Return: AX = 0000h successful
  2019.         CX = year
  2020.         DH = month
  2021.         DL = day
  2022.     AX < 0       error code (see #2681)
  2023. SeeAlso: AX=CB0Bh,AX=CB0Ch
  2024. --------F-2FCB0B-----------------------------
  2025. INT 2F - Communicating Applications Specification - SET TASK DATE
  2026.     AX = CB0Bh
  2027.     BX = event handle (task event only)
  2028.     CX = year
  2029.     DH = month
  2030.     DL = day
  2031. Return: AX = 0000h successful
  2032.     AX < 0       error code (see #2681)
  2033. Note:    setting a task's date and time to before the current date and time
  2034.       causes it to execute immediately
  2035. SeeAlso: AX=CB01h,AX=CB0Ah,AX=CB0Dh
  2036. --------F-2FCB0C-----------------------------
  2037. INT 2F - Communicating Applications Specification - GET EVENT TIME
  2038.     AX = CB0Ch
  2039.     BX = event handle
  2040.     DL = queue
  2041.         00h task queue
  2042.         01h receive queue
  2043.         02h log queue
  2044. Return: AX = 0000h successful
  2045.         CH = hour
  2046.         CL = minute
  2047.         DH = second
  2048.         DL = 00h
  2049.     AX < 0       error code (see #2681)
  2050. SeeAlso: AX=CB0Ah,AX=CB0Dh
  2051. --------F-2FCB0D-----------------------------
  2052. INT 2F - Communicating Applications Specification - SET TASK TIME
  2053.     AX = CB0Dh
  2054.     BX = event handle (task events only)
  2055.     CH = hour
  2056.     CL = minute
  2057.     DH = second
  2058.     DL unused
  2059. Return: AX = 0000h successful
  2060.     AX < 0       error code (see #2681)
  2061. Note:    setting a task's date and time to before the current date and time
  2062.       causes it to execute immediately
  2063. SeeAlso: AX=CB0Bh,AX=CB0Ch,AX=CB10h
  2064. --------F-2FCB0E-----------------------------
  2065. INT 2F - Communicating Applications Specification - GET EXTERNAL DATA BLOCK
  2066.     AX = CB0Eh
  2067.     DS:DX -> 256-byte buffer for external data block (see #2682)
  2068. Return: AX = 0000h successful
  2069.         DS:DX buffer filled
  2070.     AX < 0       error code (see #2681)
  2071.  
  2072. Format of CAS external data block:
  2073. Offset    Size    Description    (Table 2682)
  2074.  00h    BYTE    CAS major version
  2075.  01h    BYTE    CAS minor version
  2076.  02h 68 BYTEs    ASCIZ path to directory containing CAS software, ends in slash
  2077.  46h 13 BYTEs    ASCIZ name of current phonebook (in CAS directory)
  2078.  53h 13 BYTEs    ASCIZ name of current logo file (in CAS directory)
  2079.  60h 32 BYTEs    ASCIZ default sender name
  2080.  80h 21 BYTEs    ASCIZ CCITT identification of fax device
  2081.  95h 107 BYTEs    reserved
  2082. --------F-2FCB0F-----------------------------
  2083. INT 2F - Communicating Applications Specification - GET/SET AUTORECEIVE
  2084.     AX = CB0Fh
  2085.     DL = subfunction
  2086.         00h get current autoreceive state
  2087.         01h set autoreceive state
  2088.         DH = number of rings before answer, 00h = never
  2089. Return: AX = 0000h autoreceive disabled
  2090.     AX = N       number of rings before answer
  2091.     AX < 0       error code (see #2681)
  2092. --------F-2FCB10-----------------------------
  2093. INT 2F - Communicating Applications Specification - GET CURRENT EVENT STATUS
  2094.     AX = CB10h
  2095.     DS:DX -> 512-byte buffer for status area (see #2684)
  2096. Return: AX = 0000h successful
  2097.         BX = event handle of current event or negative error code if
  2098.               no current event
  2099.         buffer filled
  2100.     AX < 0       error code (see #2681)
  2101. SeeAlso: AX=CB02h,AX=CB0Dh
  2102.  
  2103. (Table 2683)
  2104. Values for CAS event type:
  2105.  00h    send
  2106.  01h    receive
  2107.  02h    polled send
  2108.  03h    polled receive
  2109.  04h to 7Fh reserved
  2110.  FFh    serious hardware error
  2111.  
  2112. Format of CAS status area:
  2113. Offset    Size    Description    (Table 2684)
  2114.  00h    BYTE    event type (see #2683)
  2115.  01h    BYTE    transfer type
  2116.         00h 200x200 dpi, FAX mode
  2117.         01h 100x200 dpi, FAX mode
  2118.         02h file transfer mode
  2119.         03h to 7Fh reserved
  2120.  02h    WORD    event status (see #2685)
  2121.  04h    WORD    event time (packed DOS time format, see INT 21/AX=5700h)
  2122.  06h    WORD    event date (packed DOS date format, see INT 21/AX=5700h)
  2123.  08h    WORD    number of files to transfer, max 7FFFh
  2124.  0Ah    WORD    offset of file transfer record
  2125.  0Ch 47 BYTEs    ASCIZ phone number to call
  2126.  3Bh 64 BYTEs    ASCIZ application-specific tag string
  2127.  7Bh    BYTE    reserved (00h)
  2128.  7Ch    BYTE    connect time, seconds
  2129.  7Dh    BYTE    connect time, minutes
  2130.  7Eh    BYTE    connect time, hours
  2131.  7Fh    DWORD    total number of pages in all files
  2132.  83h    DWORD    pages already transmitted
  2133.  87h    WORD    number of files already transmitted
  2134.  89h    BYTE    cover page flag
  2135.         00h don't transmit cover page
  2136.         01h transmit cover page
  2137.         02h to 7Fh reserved
  2138.  8Ah    WORD    total number of transmission errors
  2139.  8Ch 78 BYTEs    reserved (zeros)
  2140.  DAh 21 BYTEs    ASCIZ remote FAX's CCITT identification
  2141.  EFH 32 BYTEs    ASCIZ destination name
  2142. 10Fh 32 BYTEs    ASCIZ sender name
  2143. 12Fh 80 BYTEs    filename of PCX logo file (max 1780x800 pixels)
  2144. 17Fh 128 BYTEs    file transfer record for current event (see #2686)
  2145.  
  2146. (Table 2685)
  2147. Values for CAS event status:
  2148.  0000h    completed successfully
  2149.  0001h    waiting
  2150.  0002h    number dialed
  2151.  0003h    connected, sending
  2152.  0004h    connected, receiving
  2153.  0005h    aborted
  2154.  0006h to 007Fh reserved
  2155.  0080h to 7FFFh application-specific events
  2156.  8000h to FFFFh error codes
  2157.  
  2158. Format of CAS file transfer record:
  2159. Offset    Size    Description    (Table 2686)
  2160.  00h    BYTE    file type (ignored unless FAX)
  2161.         00h ASCII
  2162.         01h PCX
  2163.         02h DCX
  2164.         03h to 7Fh reserved
  2165.  01h    BYTE    text size for ASCII FAX file
  2166.         00h = 80 columns by 66 lines (11 inches)
  2167.         01h = 132 columns by 88 lines (11 inches)
  2168.         02h to 7Fh reserved
  2169.  02h    BYTE    status of file
  2170.         00h untouched
  2171.         01h opened
  2172.         02h moved
  2173.         03h deleted
  2174.         04h not yet received
  2175.         05h to 7Fh reserved
  2176.  03h    DWORD    bytes already transmitted
  2177.  07h    DWORD    file size in bytes
  2178.  0Bh    WORD    pages alread transmitted
  2179.  0Dh    WORD    number of pages in file
  2180.  0Fh 80 BYTEs    ASCIZ filename
  2181.  5Fh    BYTE    1/8 inch page length
  2182.         if page length below set to 01h through 7Fh, this value
  2183.           specifies additional 1/8 inch increments to page length
  2184.  60h    BYTE    page length
  2185.         00h = 11 inches
  2186.         01h to 7Fh = page length is this number of inches plus value of
  2187.               1/8 inch field above
  2188.         80h to FEh reserved
  2189.         FFh = ASCII pages ending with formfeed
  2190.  61h 31 BYTEs    reserved (zeros)
  2191. --------F-2FCB11-----------------------------
  2192. INT 2F - Communicating Applications Specification - GET QUEUE STATUS
  2193.     AX = CB11h
  2194.     DL = queue to get status of
  2195.         00h task queue
  2196.         01h receive queue
  2197.         02h log queue
  2198.         03h send events (v1.2+)
  2199.         04h receive events (v1.2+)
  2200. Return: AX >= 0     total number of changes made to queue, modulo 32768
  2201.         BX = number of control files currently in queue
  2202.         CX = number of received files (zero for task and log queues)
  2203.     AX < 0    error code (see #2681)
  2204. SeeAlso: AX=CB12h
  2205. --------F-2FCB11DL03-------------------------
  2206. INT 2F - Communicating Applications Spec v1.2+ - GET NUMBER OF SEND EVENTS
  2207.     AX = CB11h
  2208.     DL = 03h
  2209. Return: AX = number of successful sends since resident manager started
  2210.     BX = number of unsuccessful sends, including warnings
  2211. SeeAlso: AX=CB11h/DL=04h
  2212. --------F-2FCB11DL04-------------------------
  2213. INT 2F - Communicating Applications Spec v1.2+ - GET NUMBER OF RECEIVE EVENTS
  2214.     AX = CB11h
  2215.     DL = 04h
  2216. Return: AX = number of received file events since resident manager started
  2217.     BX = number of received FAX events
  2218. SeeAlso: AX=CB11h/DL=03h
  2219. --------F-2FCB12-----------------------------
  2220. INT 2F - Communicating Applications Specification - GET HARDWARE STATUS
  2221.     AX = CB12h
  2222.     DS:DX -> 128-byte status buffer (see #2687,#2689)
  2223. Return: AX = 0000h successful
  2224.         DS:DX buffer filled with hardware-dependent status information
  2225.        < 0       error code (see #2681)
  2226. SeeAlso: AX=CB10h,AX=CB11h
  2227.  
  2228. Format of status buffer for Intel Connection CoProcessor:
  2229. Offset    Size    Description    (Table 2687)
  2230.  00h    BYTE    Connection CoProcessor connection status flags (see #2690)
  2231.  01h    BYTE    number of kilobytes of free buffer space
  2232.  02h    BYTE    page buffer status
  2233.         bit 7: Connection CoProcessor has documents to send
  2234.         bits 6-0: number of pages in buffer
  2235.  03h    BYTE    number of retries left for dialing number
  2236.  04h    BYTE    page number to retransmit
  2237.  05h    BYTE    communications status (see #2691)
  2238.  06h    BYTE    baud rate (see #2688)
  2239.  07h  3 BYTEs    reserved
  2240.  0Ah    BYTE    Connection CoProcessor hardware status (see #2692)
  2241.  0Bh    BYTE    Connection CoProcessor switch states (see #2693)
  2242.  0Ch    BYTE    communications flags (see #2694)
  2243.  0Dh    BYTE    reserved
  2244.  0Eh    WORD    error count (only valid while busy, reset when idle)
  2245.  10h    DWORD    size of nonstandard format (NSF) file in bytes
  2246.  14h    BYTE    'A' if Connection CoProcessor board present
  2247.  15h  9 BYTEs    reserved
  2248.  1Eh 21 BYTEs    ASCIZ CCITT identification
  2249.  33h 77 BYTEs    reserved
  2250. Note:    the Intel Connection CoProcessor and SatisFAXtion may be distinguished
  2251.       by examining the byte at offset 14h
  2252.  
  2253. Bitfields for Connection CoProcessor baud rate:
  2254. Bit(s)    Description    (Table 2688)
  2255.  7    reserved
  2256.  6-4    baud rate
  2257.     000 = 300 baud    (V.21 SDLC or HDLC mode)
  2258.     100 = 2400 baud (V.27 ter)
  2259.     101 = 4800 baud (V.27 ter)
  2260.     110 = 7200 baud (V.29)
  2261.     111 = 9600 baud (V.29)
  2262.  3-0    reserved, should be 0110
  2263.  
  2264. Format of status buffer for Intel SatisFAXtion board:
  2265. Offset    Size    Description    (Table 2689)
  2266.  00h    BYTE    SatisFAXtion connection status flags (see #2695)
  2267.  01h    BYTE    SatisFAXtion board state (see #2696)
  2268.  02h    BYTE    number of KB free in buffer
  2269.  03h    BYTE    number of pages or files in buffer
  2270.  04h    BYTE    number of redials remaining on current number
  2271.  05h    BYTE    FAX page number to retransmit
  2272.  06h    BYTE    current page/file in block transfer
  2273.  07h    BYTE    number of rings received (only if auto-answer enabled)
  2274.  08h    WORD    error count
  2275.  0Ah    DWORD    length of file being transferred
  2276.  0Eh  6 BYTEs    reserved
  2277.  14h    BYTE    'B' if SatisFAXtion board present
  2278.  15h 13 BYTEs    ASCIZ transfer agent name
  2279.  22h  5 BYTEs    ASCIZ transfer agent version number
  2280.  27h 13 BYTEs    ASCIZ resident loader name
  2281.  34h  5 BYTEs    ASCIZ resident loader version number
  2282.  39h 21 BYTEs    ASCIZ remote CSID
  2283.  4Eh 13 BYTEs    ASCIZ resident manager name
  2284.  5Bh  5 BYTEs    ASCIZ resident manager version number
  2285.  60h 32 BYTEs    reserved
  2286. Note:    the Intel Connection CoProcessor and SatisFAXtion may be distinguished
  2287.       by examining the byte at offset 14h
  2288.  
  2289. Bitfields for Connection CoProcessor connection status flags:
  2290. Bit(s)    Description    (Table 2690)
  2291.  7    hardware busy sending or receiving
  2292.  6    last page of data
  2293.  5    no data on current page
  2294.  4    retransmit request for current page being transmitted
  2295.  3    NSF (nonstandard file) mode active
  2296.  2-0    reserved
  2297.  
  2298. Bitfields for communications status:
  2299. Bit(s)    Description    (Table 2691)
  2300.  7    originating call
  2301.  6    FAX message to be sent
  2302.  5    on line
  2303.  4    ring detected and receive enabled
  2304.  3    buffer dumped on receive
  2305.  2-0    hardware sequence state
  2306.     000 idle
  2307.     001 dial
  2308.     010 answer
  2309.     011 transmit
  2310.     100 receive
  2311.     101 pre-message
  2312.     110 post-message
  2313.     111 disconnect
  2314.  
  2315. Bitfields for Connection CoProcessor hardware status:
  2316. Bit(s)    Description    (Table 2692)
  2317.  7    modem option installed
  2318.  6    Connection CoProcessor has control of DAA (not latched)
  2319.  5    on line (not latched)
  2320.  4    ring detected (not latched)
  2321.  3    data in command buffer (not latched)
  2322.  2    set if using DMA channel 1, clear if using DMA channel 3
  2323.  1    line length compensation 1 set (not latched)
  2324.  0    line length compensation 0 set (not latched)
  2325.  
  2326. Bitfields for Connection CoProcessor switch states:
  2327. Bit(s)    Description    (Table 2693)
  2328.  7    reserved
  2329.  6    unused
  2330.  5    spare switch open
  2331.  4    FAX ADR1 switch open
  2332.  3    FAX ADR0 switch open
  2333.  2    alternate interrupt switch open
  2334.  1    COM SEL 1 switch open
  2335.  0    COM SEL 0 switch open
  2336. Note:    valid combinations of 0-2 are
  2337.     000  COM2 IRQ3 IObase 2F8h
  2338.     001  COM1 IRQ4 IObase 3F8h
  2339.     010  COM4 IRQ3 IObase 2E8h
  2340.     011  COM3 IRQ4 IObase 3E8h
  2341.     110  COM4 IRQ2 IObase 2E8h
  2342.     111  COM3 IRQ5 IObase 3E8h
  2343.  
  2344. Bitfields for communications flags:
  2345. Bit(s)    Description    (Table 2694)
  2346.  7    reserved
  2347.  6    auxiliary relay forced ON
  2348.  5    modem select relay forced ON
  2349.  4    offhook relay forced ON
  2350.  3    9600 bps enabled
  2351.  2    7200 bps enabled
  2352.  1    4800 bps enabled
  2353.  0    2400 bps enabled
  2354.  
  2355. Bitfields for SatisFAXtion connection status flags:
  2356. Bit(s)    Description    (Table 2695)
  2357.  7    busy in T.30 CCITT fax protocol
  2358.  6    data on current page/file (only used for block xfers)
  2359.  5    retransmission of last page requested
  2360.  4    in file transfer mode
  2361.  3    data in buffer
  2362.  2    data buffer dumped on receive
  2363.  1    200x100 dpi resolution instead of 200x200 dpi
  2364.  0    data modem in use, FAX image modem not available
  2365.  
  2366. Bitfields for SatisFAXtion board state:
  2367. Bit(s)    Description    (Table 2696)
  2368.  7    reserved
  2369.  6    handset jack active, data and FAX modems not available
  2370.  5-3    current rate
  2371.     000  300 bps (V.21 HDLC)
  2372.     100 2400 bps (V.27 ter)
  2373.     101 4800 bps (V.27 ter)
  2374.     110 7200 bps (V.29)
  2375.     111 9600 bps (V.29)
  2376.  2-0    T.30 CCITT protocol state
  2377.     000 idle
  2378.     001 dialing
  2379.     010 answering
  2380.     011 transmitting
  2381.     100 receiving
  2382.     101 pre-message
  2383.     110 post-message
  2384.     111 disconnect
  2385. --------F-2FCB13DL00-------------------------
  2386. INT 2F - Communicating Applications Specification - GET DIAGNOSTICS RESULTS
  2387.     AX = CB13h
  2388.     DL = 00h
  2389. Return: AX = 0040h in progress
  2390.        >= 0       passed
  2391.        < 0       hardware-dependent failure code (see #2697,#2698)
  2392. SeeAlso: AX=CB13h/DL=01h
  2393.  
  2394. Bitfields for Intel Connection CoProcessor failure codes:
  2395. Bit(s)    Description    (Table 2697)
  2396.  3    9600 bps FAX modem module failed
  2397.  2    SDLC chip failed
  2398.  1    RAM failed
  2399.  0    ROM checksum failed
  2400.  
  2401. Bitfields for Intel SatisFAXtion failure codes:
  2402. Bit(s)    Description    (Table 2698)
  2403.  1    2400 bps data modem failed
  2404.  0    9600 bps FAX modem failed
  2405. --------F-2FCB13DL01-------------------------
  2406. INT 2F - Communicating Applications Specification - START DIAGNOSTICS
  2407.     AX = CB13h
  2408.     DL = 01h
  2409. Return: AX = 0000h successfully started
  2410.     AX < 0       error code (see #2681)
  2411. SeeAlso: AX=CB13h/DL=00h
  2412. --------F-2FCB14-----------------------------
  2413. INT 2F - Communicating Applications Specification - MOVE RECEIVED FILE
  2414.     AX = CB14h
  2415.     BX = event handle
  2416.     CX = receive file number
  2417.         0001h first received file
  2418.         N      Nth received file
  2419.     DS:DX -> ASCIZ string specifying new name for file (must not exist)
  2420. Return: AX = 0000h successful
  2421.     AX < 0       error code (see #2681)
  2422. --------F-2FCB15-----------------------------
  2423. INT 2F - Communicating Applications Specification - SUBMIT FILE TO SEND
  2424.     AX = CB15h
  2425.     DS:DX -> variable-length data area (see #2699)
  2426. Return: AX >= 0 event handle
  2427.     AX < 0    error code (see #2681)
  2428. SeeAlso: AX=CB01h
  2429.  
  2430. Format of CAS file submission data area:
  2431. Offset    Size    Description    (Table 2699)
  2432.  00h    BYTE    transfer type
  2433.         00h = 200x200 dpi, fax mode
  2434.         01h = 100x200 dpi, fax mode
  2435.         02h = file transfer mode
  2436.         03h to 7Fh reserved
  2437.  01h    BYTE    text size
  2438.         00h = 80 columns
  2439.         01h = 132 columns
  2440.         02h to 7Fh reserved
  2441.  02h    WORD    time to send (DOS packed time, see #1317 at INT 21/AX=5700h)
  2442.  04h    WORD    date to send (DOS packed date, see #1318 at INT 21/AX=5700h)
  2443.  06h 32 BYTEs    ASCIZ destination name
  2444.  26h 80 BYTEs    ASCIZ name of file to send
  2445.  76h 47 BYTEs    ASCIZ phone number to dial
  2446.  A5h 64 BYTEs    ASCIZ application-specific tag string
  2447.  E5h    BYTE    reserved (00h)
  2448.  E6h    BYTE    cover page
  2449.         00h don't send cover page
  2450.         01h send cover page
  2451.         02h to 7Fh reserved
  2452.  E7h 23 BYTEs    reserved (zeros)
  2453.  FEh variable    ASCIZ string containing text of cover page (if cover page flag
  2454.         set to 01h)
  2455. --------F-2FCB16BX1234-----------------------
  2456. INT 2F - Communicating Applications Spec v1.2+ - UNLOAD RESIDENT MANAGER
  2457.     AX = CB16h
  2458.     BX = 1234h
  2459.     CX = 5678h
  2460.     DX = 9ABCh
  2461. Return: AX = 0000h successful
  2462.     AX < 0       error code
  2463. Note:    the MTEZ XpressFax CASMGR ignores the values in BX,CX, and DX
  2464. SeeAlso: AX=C000h/BX=444Bh,AX=CB00h
  2465. Index:    uninstall;CAS Manager
  2466. --------F-2FCB17-----------------------------
  2467. INT 2F - Communicating Applications Spec v1.2+ - SET COVER PAGE STATUS
  2468.     AX = CB17h
  2469.     BX = event handle
  2470.     CL = cover page status
  2471.         00h not read
  2472.         01h read by user
  2473. Return: AX = 0000h successful
  2474.     AX < 0       error code
  2475. --------F-2FCB80-----------------------------
  2476. INT 2F - Intel SatisFAXtion CASMGR - ???
  2477.     AX = CB80h
  2478.     ???
  2479. Return: ???
  2480. --------F-2FCB81-----------------------------
  2481. INT 2F - Intel SatisFAXtion CASMGR - ???
  2482.     AX = CB81h
  2483.     ???
  2484. Return: ???
  2485. --------F-2FCB82-----------------------------
  2486. INT 2F - Intel SatisFAXtion CASMGR - ???
  2487.     AX = CB82h
  2488.     ???
  2489. Return: ???
  2490. --------F-2FCBDCBL56-------------------------
  2491. INT 2F - Comwave Microfax Specification - GET STATUS ARRAY
  2492.     AX = CBDCh
  2493.     BL = 56h
  2494.     BH = line number (starts with 1)
  2495.     CX:DX -> 32-byte status buffer or 80 character string
  2496. Return: AX = number of cards installed, or FFFFh on error
  2497. Program: Comwave manufacturers the Microfax line of fax cards which are a
  2498.       high-performance multi-card FAX solution for OEMs.
  2499. Note:    defaults to AH=CBh but can be changed
  2500. SeeAlso: AX=CBDDh,AX=DA00h
  2501. --------F-2FCBDDBL56-------------------------
  2502. INT 2F - Comwave Microfax Specification - COMMAND SUBMISSION
  2503.     AX = CBDDh
  2504.     BL = 56h
  2505.     BH = ?
  2506.     CX:DX -> command to execute
  2507. Return: AX = status
  2508.         0000h success
  2509.         FFFFh on error
  2510. SeeAlso: AH=2Ah,AX=CBDCh,AX=80FBh
  2511. --------c-2FCC--SI5453-----------------------
  2512. INT 2F U - PC-Kwik Programs - API
  2513.     AH = CCh
  2514.     SI = 5453h or 7473h
  2515.     AL = function number (at least 00h,01h,04h,05h,07h,80h)
  2516.     DL = program identifier (see #2700)
  2517. Return: SI = 7473h
  2518.     other registers vary by function
  2519. Note:    Qualitas Qcache v4.00 is an OEM version of Super PC-Kwik v4.00, and
  2520.       thus supports this call
  2521. SeeAlso: INT 21/AH=2Bh/CX=4358h
  2522.  
  2523. (Table 2700)
  2524. Values for PC-Kwik program identifier:
  2525.  00h    all installed PowerPak programs
  2526.  01h    SUPERPCK/SUPER/QCACHE v4.00+ (disk cache)
  2527.  02h    PCKSPL (print spooler)
  2528.  04h    PCKSCRN (screen accelerator)
  2529.  05h    PCKKEY (keyboard enhancer)
  2530.  06h    PCKRAMD (RAM disk)
  2531.  08h    PCKWIK.SYS
  2532.  10h    PCKCDROM (CD-ROM support for SUPERPCK)
  2533. --------N-2FCC00-----------------------------
  2534. INT 2F - Tsoft NFSDRVR - INSTALLATION CHECK
  2535.     AX = CC00h
  2536. Return: AX = 7777h
  2537.     BX = ???
  2538.     CX = ???
  2539.     DX = ???
  2540.     ES = data segment of resident portion
  2541. SeeAlso: AX=CC01h,AX=CC06h
  2542. --------N-2FCC01-----------------------------
  2543. INT 2F - Tsoft NFSDRVR - ???
  2544.     AX = CC01h
  2545.     ???
  2546. Return: ???
  2547. SeeAlso: AX=CC00h
  2548. --------N-2FCC02-----------------------------
  2549. INT 2F - Tsoft NFSDRVR - ???
  2550.     AX = CC02h
  2551.     ???
  2552. Return: ???
  2553. SeeAlso: AX=CC00h
  2554. --------N-2FCC03-----------------------------
  2555. INT 2F - Tsoft NFSDRVR - ???
  2556.     AX = CC03h
  2557.     ???
  2558. Return: ???
  2559. SeeAlso: AX=CC00h
  2560. --------N-2FCC04-----------------------------
  2561. INT 2F - Tsoft NFSDRVR - ???
  2562.     AX = CC04h
  2563.     ???
  2564. Return: ???
  2565. SeeAlso: AX=CC00h
  2566. --------N-2FCC05-----------------------------
  2567. INT 2F - Tsoft NFSDRVR - ???
  2568.     AX = CC05h
  2569.     ???
  2570. Return: ???
  2571. SeeAlso: AX=CC00h
  2572. --------N-2FCC06-----------------------------
  2573. INT 2F - Tsoft NFSDRVR - ???
  2574.     AX = CC06h
  2575.     ???
  2576. Return: ???
  2577. SeeAlso: AX=CC00h
  2578. --------P-2FCD00-----------------------------
  2579. INT 2F - Intel Image Processing Interface - INSTALLATION CHECK
  2580.     AX = CD00h
  2581. Return: AL = state
  2582.         00h not installed, OK to install
  2583.         01h not installed, not OK to install
  2584.         FFh installed
  2585. SeeAlso: AX=CD02h"Image"
  2586. --------P-2FCD00-----------------------------
  2587. INT 2F - LaserPort Interface - INSTALLATION CHECK
  2588.     AX = CD00h
  2589. Return: AL = status
  2590.         FFh installed
  2591. SeeAlso: AX=CD0Fh"LaserPort"
  2592. --------U-2FCD00-----------------------------
  2593. INT 2F - SWELL.EXE - INSTALLATION CHECK
  2594.     AX = CD00h
  2595. Return: AX = 00FFh installed
  2596.         BH = major version
  2597.         BL = minor version
  2598. Program: SWELL.EXE is a TSR which swaps programs to disk when they EXEC a
  2599.       child process with INT 21/AH=4Bh
  2600. --------s-2FCD00BX464F-----------------------
  2601. INT 2F - Forte/Gravis ULTRAMID - INSTALLATION CHECK
  2602.     AX = CD00h
  2603.     BX = 464Fh ('FO')
  2604.     CX = 5254h ('RT')
  2605.     DX = 4520h ('E ')
  2606. Return: AL = FFh if installed
  2607.         BX = 4155h ('AU')
  2608.         CX = 4449h ('DI')
  2609.         DX = 4F20h ('O ')
  2610.         ES:SI -> program ID string
  2611. Program: ULTRAMID is a MIDI driver for the Gravis UltraSound which allows use
  2612.       of AIL drivers with other software
  2613. Range:    AH=CDh-ECh, selected by scanning for an available multiplex number
  2614. SeeAlso: INT 21/AX=FD12h,AX=CD00h/DX=4957h
  2615. --------s-2FCD00DX4957-----------------------
  2616. INT 2F R - InterWave Game API - INSTALLATION CHECK
  2617.     AX = CD00h
  2618.     DX = 4957h ('IW')
  2619.     SI = 5645h ('VE')
  2620. Return: AL = FFh if installed
  2621.         DX = 4554h ('ET')
  2622.         SI = 454Bh ('EK')
  2623. Range:    AH=CDh-ECh, selected by scanning for an available multiplex number
  2624. SeeAlso: AX=CD00h/BX=464Fh,AX=CD01h"InterWave",AX=CD21h"InterWave"
  2625. SeeAlso: AX=CD80h"InterWave"
  2626. --------P-2FCD01-----------------------------
  2627. INT 2F - Intel Image Processing Interface - SET DEVICE NAME
  2628.     AX = CD01h
  2629.     CX:BX -> ASCIZ character device name ("LPTn", "COMn", "PRN")
  2630. Return: AL = status
  2631.         00h successful
  2632.         CX:BX -> internal character device name
  2633.         80h error
  2634. --------U-2FCD01-----------------------------
  2635. INT 2F - SWELL.EXE - SUSPEND ONCE
  2636.     AX = CD01h
  2637. Return: AX = 0000h
  2638. SeeAlso: AX=CD02h"SWELL"
  2639. --------s-2FCD01BX0000-----------------------
  2640. INT 2F R - InterWave Game API - GET NUMBER OF INTERWAVE PROGRAMS / PROGRAM ID
  2641.     AX = CD01h
  2642.     BX = 0000h
  2643. Return: BX = number of programs currently installed on the Game API
  2644. Desc:    get the number of programs supporting the InterWave Game API which are
  2645.       currently installed in memory, which also forms the next program ID
  2646.       number if the caller wishes to go resident on the API
  2647. Range:    AH=CDh-ECh, selected by scanning for an available multiplex number
  2648. Notes:    the first program to install on the IW Game API must use ID 00h
  2649.     the AMD-recommended implementation is for the handler to increment
  2650.       BX and chain to the previous handler (if any), but this will fail
  2651.       if TSRs are unloaded out-of-order
  2652. SeeAlso: AX=CD00h"InterWave",AX=CD02h"InterWave",AX=CD03h"InterWave"
  2653. SeeAlso: AX=CD05h"InterWave",AX=CD21h"InterWave",AX=CD80h"InterWave"
  2654. --------P-2FCD02-----------------------------
  2655. INT 2F - Intel Image Processing Interface - GET VERSION NUMBER
  2656.     AX = CD02h
  2657. Return: AL = status
  2658.         00h/01h successful
  2659.         BH = major version number (BCD)
  2660.         BL = minor version number (BCD)
  2661.         80h error
  2662. Note:    if return AL = 01h, the IPI supports network redirection
  2663. SeeAlso: AX=CD00h"Image"
  2664. --------U-2FCD02-----------------------------
  2665. INT 2F - SWELL.EXE - SUSPEND
  2666.     AX = CD02h
  2667. Return: AX = 0000h
  2668. SeeAlso: AX=CD03h"SWELL"
  2669. --------s-2FCD02-----------------------------
  2670. INT 2F R - InterWave Game API - GET PROGRAM STATUS AND INFORMATION
  2671.     AX = CD02h
  2672.     BX = program identifier
  2673. Return: CX = program status
  2674.         bit 0: using synthesizer
  2675.         bit 1: using Codec
  2676.         bit 2: supports at least one Game Device (see AX=CD21h,AX=CD22h)
  2677.     BX = supported API version (BCD, BH=major, BL=minor) if CX bit 2 set
  2678.     ES:DI -> ASCIZ identification string
  2679. Range:    AH=CDh-ECh, selected by scanning for an available multiplex number
  2680. Note:    ordinarily, an application will loop through all valid program
  2681.       identifiers (as returned by AX=CD01h); if any of the installed
  2682.       programs conflicts with the use the caller wishes to make of the
  2683.       InterWave chip, it should be disabled with AX=CD03h first
  2684. SeeAlso: AX=CD00h"InterWave",AX=CD01h"InterWave",AX=CD03h"InterWave"
  2685. SeeAlso: AX=CD05h"InterWave",AX=CD21h"InterWave",AX=CD80h"InterWave"
  2686. --------P-2FCD03-----------------------------
  2687. INT 2F - Intel Image Processing Interface - SELECT SCAN LINE
  2688.     AX = CD03h
  2689.     BX = scan line
  2690.     CX = requested density in dots per inch (300, 600, or 1200)
  2691. Return: AL = status (see also AX=CD04h"Image")
  2692.         00h successful
  2693.         CX = density at which scan line was mapped
  2694.         ES:DI -> start of scan line
  2695.         80h unsuccessful
  2696.         81h scan line out of range
  2697.         82h unsupported scan line density
  2698.         83h out of memory
  2699. SeeAlso: AX=CD04h"Image"
  2700. --------U-2FCD03-----------------------------
  2701. INT 2F - SWELL.EXE - ACTIVATE
  2702.     AX = CD03h
  2703. Return: AX = 0000h
  2704. SeeAlso: AX=CD02h"SWELL"
  2705. --------s-2FCD03-----------------------------
  2706. INT 2F R - InterWave Game API - SUSPEND PROGRAM
  2707.     AX = CD03h
  2708.     BX = installed program identifier
  2709.     CX = InterWave section to be released
  2710.         0000h all
  2711.         0001h synthesizer
  2712.         0002h Codec
  2713. Return: AL = status
  2714.         00h successful
  2715.         BX = base port
  2716.         CL = IRQ
  2717.         CH = DMA channel (Codec only)
  2718.         else failed
  2719. SeeAlso: AX=CD00h"InterWave",AX=CD01h"InterWave",AX=CD02h"InterWave"
  2720. SeeAlso: AX=CD04h"InterWave",AX=CD21h"InterWave",AX=CD80h"InterWave"
  2721. --------P-2FCD04-----------------------------
  2722. INT 2F - Intel Image Processing Interface - MOVE BITMAP TO SCANLINE
  2723.     AX = CD04h
  2724.     CX:BX -> structure (see #2702)
  2725. Return: AL = status (see #2701)
  2726. SeeAlso: AX=CD03h"Image"
  2727.  
  2728. (Table 2701)
  2729. Values for IPI function status:
  2730.  00h    successful
  2731.  80h    unsuccessful
  2732.  81h    scan line out of range
  2733.  82h    unsupported scan line density
  2734.  83h    out of memory
  2735.  84h    unrecognized source
  2736.  85h    initialization error
  2737.  
  2738. Format of structure:
  2739. Offset    Size    Description    (Table 2702)
  2740.  00h    WORD    image source (0 = conventional memory, 1 = expanded memory)
  2741.  02h    DWORD    pointer to image data
  2742.  06h    WORD    scan line on which to place
  2743.  08h    WORD    bit offset from start of scan line at which to place
  2744.  0Ah    WORD    density of bitmap data (300, 600, or 1200 dpi)
  2745.  0Ch    WORD    width in bits of data
  2746.  0Eh    WORD    source logical page number
  2747.  10h    WORD    source handle (only if source in expanded memory)
  2748.  12h    WORD    source offset (only if source in expanded memory)
  2749. --------U-2FCD04-----------------------------
  2750. INT 2F - SWELL.EXE - TURN OFF VERBOSE MODE
  2751.     AX = CD04h
  2752. Return: AX = 0000h
  2753. SeeAlso: AX=CD05h"SWELL"
  2754. --------s-2FCD04-----------------------------
  2755. INT 2F R - InterWave Game API - WAKE PROGRAM
  2756.     AX = CD04h
  2757.     BX = installed program identifier
  2758. Return: AL = status
  2759.         00h successful
  2760.         else failed
  2761. Note:    this function should only be called after the program has been
  2762.       suspended with AX=CD03h
  2763. SeeAlso: AX=CD00h"InterWave",AX=CD01h"InterWave",AX=CD03h"InterWave"
  2764. SeeAlso: AX=CD05h"InterWave",AX=CD21h"InterWave",AX=CD80h"InterWave"
  2765. SeeAlso: INT 7E/AL=84h"IWSBSDRV"
  2766. --------P-2FCD05-----------------------------
  2767. INT 2F - Intel Image Processing Interface - PRINT PAGE
  2768.     AX = CD05h
  2769. Return: AL = status (00h,80h) (see #2701)
  2770. Note:    page image is retained, so multiple calls will print multiple copies of
  2771.       the page
  2772. SeeAlso: AX=CD06h"Image"
  2773. --------U-2FCD05-----------------------------
  2774. INT 2F - SWELL.EXE - TURN ON VERBOSE MODE
  2775.     AX = CD05h
  2776. Return: AX = 0000h
  2777. SeeAlso: AX=CD04h"SWELL"
  2778. --------s-2FCD05-----------------------------
  2779. INT 2F R - InterWave Game API - UNINSTALL RESIDENT DEVICE DRIVER
  2780.     AX = CD05h
  2781.     BX = installed program identifier
  2782. Return: AL = status
  2783.         00h successful
  2784.         else failed
  2785. SeeAlso: AX=CD00h"InterWave",AX=CD01h"InterWave",AX=CD02h"InterWave"
  2786. SeeAlso: AX=CD03h"InterWave",AX=CD21h"InterWave",AX=CD80h"InterWave"
  2787. --------P-2FCD06-----------------------------
  2788. INT 2F - Intel Image Processing Interface - CLEAR PAGE
  2789.     AX = CD06h
  2790. Return: AL = status (00h,80h) (see #2701)
  2791. Note:    palette is reset to default
  2792. SeeAlso: AX=CD09h"Image"
  2793. --------U-2FCD06-----------------------------
  2794. INT 2F - SWELL.EXE - UNINSTALL
  2795.     AX = CD06h
  2796. Return: AX = status
  2797.         0000h uninstalled
  2798.         8002h programs still swapped, not uninstalled
  2799. --------P-2FCD07-----------------------------
  2800. INT 2F - Intel Image Processing Interface - reserved
  2801.     AX = CD07h
  2802. SeeAlso: AX=CD00h"Image"
  2803. --------U-2FCD07-----------------------------
  2804. INT 2F - SWELL.EXE - GET INFO
  2805.     AX = CD07h
  2806.     ES:BX -> 32-byte buffer for info (see #2703)
  2807. Return: AX = status
  2808.         0000h successful
  2809.         ES:BX buffer filled
  2810.         8001h buffer wrong size
  2811.  
  2812. Format of SWELL.EXE info buffer:
  2813. Offset    Size    Description    (Table 2703)
  2814.  00h    WORD    20h  (total size of buffer)
  2815.  02h    BYTE    suspend-once mode active if nonzero
  2816.  03h    BYTE    00h active, 01h suspended
  2817.  04h    BYTE    00h quiet, 01h verbose
  2818.  05h    BYTE    "Borland support" (allowing INT 21/AX=4B01h) on if nonzero
  2819.  06h 26 BYTEs    unused???
  2820. --------P-2FCD08-----------------------------
  2821. INT 2F - Intel Image Processing Interface - SCREEN IMAGE
  2822.     AX = CD08h
  2823.     CX:BX -> structure (see #2704)
  2824. Return: AL = status (00h,80h-85h) (see #2701)
  2825. SeeAlso: AX=CD05h"Image",AX=CD09h"Image"
  2826.  
  2827. Format of IPI screen image structure:
  2828. Offset    Size    Description    (Table 2704)
  2829.  00h    WORD    image source (0 = conventional memory, 1 = expanded memory)
  2830.  02h    DWORD    pointer to image data
  2831.  06h    WORD    horizontal position on paper of left edge (in 1200 dpi units)
  2832.  08h    WORD    vertical position on paper of top edge (in 1200 dpi units)
  2833.  0Ah    WORD    left cropping (currently must be zero)
  2834.  0Ch    WORD    top cropping (currently must be zero)
  2835.  0Eh    WORD    width (currently must be 8000h)
  2836.  10h    WORD    height (currently must be 8000h)
  2837.  12h    WORD    horizontal size of image in 1200 dpi units
  2838.  14h    WORD    vertical size of image in 1200 dpi units
  2839.  16h    WORD    aspect ratio (currently reserved)
  2840.  18h    WORD    initialization flag (if 01h, initialization is performed)
  2841.  1Ah    WORD    pixels per line of source data
  2842.  1Ch    WORD    number of scan lines in source data
  2843.  1Eh    WORD    number of scan lines in packet
  2844.  20h    WORD    bits per pixel (1,2,4,6, or 8)
  2845.  22h    WORD    pixels per byte (1,2,4, or 8)
  2846.  24h    WORD    compression type (currently only 00h [uncompressed] supported)
  2847.  26h    WORD    source page number (if in expanded memory)
  2848.  28h    WORD    source handle (if in expanded memory)
  2849.  2Ah    WORD    source offset (if in expanded memory)
  2850. --------U-2FCD08-----------------------------
  2851. INT 2F - SWELL.EXE - UNUSED
  2852.     AX = CD08h
  2853. Return: AX = FFFFh (error)
  2854. --------P-2FCD09-----------------------------
  2855. INT 2F - Intel Image Processing Interface - LOAD SCREEN
  2856.     AX = CD09h
  2857.     CX:BX -> structure (see #2705)
  2858. Return: AL = status (00h,80h) (see #2701)
  2859. SeeAlso: AX=CD06h"Image Processing",AX=CD0Ah"Image Processing"
  2860.  
  2861. Format of IPI load screen structure:
  2862. Offset    Size    Description    (Table 2705)
  2863.  00h    BYTE    style
  2864.         44h ('D') diamond style
  2865.         4Ch ('L') line style
  2866.  01h    BYTE    reserved (00h)
  2867.  02h    WORD    frequency in lines per inch [sic]
  2868.         currently, coerced to nearest of 50, 60, 68, 70, 75, 85, or 100
  2869.  04h    WORD    screen angle in degrees (-360 to 360)
  2870.         currently coerced to nearest of -45, 0, 45, or 90
  2871. --------U-2FCD09-----------------------------
  2872. INT 2F - SWELL.EXE - TURN OFF "BORLAND SUPPORT"
  2873.     AX = CD09h
  2874. Return: AX = 0000h
  2875. SeeAlso: AX=CD0Ah"SWELL"
  2876. --------P-2FCD0A-----------------------------
  2877. INT 2F - Intel Image Processing Interface - LOAD PALETTE
  2878.     AX = CD0Ah
  2879.     CX:BX -> palette structure (see #2706)
  2880. Return: AL = status (00h,80h) (see #2701)
  2881. SeeAlso: AX=CD09h"Image Processing"
  2882.  
  2883. Format of IPI palette structure:
  2884. Offset    Size    Description    (Table 2706)
  2885.  00h    BYTE    bits per pixel for which palette is to be used (1,2,4,6, or 8)
  2886.  01h    2**N    palette translation values, one per possible pixel value
  2887. --------U-2FCD0A-----------------------------
  2888. INT 2F - SWELL.EXE - TURN ON "BORLAND SUPPORT"
  2889.     AX = CD0Ah
  2890. Return: AX = 0000h
  2891. SeeAlso: AX=CD09h"SWELL"
  2892. --------P-2FCD0F-----------------------------
  2893. INT 2F - LaserPort Interface - EXECUTE FUNCTION
  2894.     AX = CD0Fh
  2895.     BL = function
  2896.         01h enable
  2897.         02h disable
  2898.         03h ???
  2899. Return: AL = status
  2900.         00h success
  2901. SeeAlso: AX=CD00h"LaserPort"
  2902. --------s-2FCD21-----------------------------
  2903. INT 2F R - InterWave Game API - OPEN GAME DEVICE
  2904.     AX = CD21h
  2905.     BX = installed program identifier
  2906.     ES:DI -> ASCIZ device name
  2907.         "MIDISIMPLE"
  2908.         "MIDICOMPLEX"
  2909.         "DIRECTCODEC"
  2910. Return: AL = status
  2911.         00h successful
  2912.         DX = device handle
  2913.         ---MIDISIMPLE and MIDICOMPLEX---
  2914.         BX = real-mode interrupt number (see #2707,#2708)
  2915.         ---DIRECTCODEC---
  2916.         BX = base port
  2917.         CL = IRQ
  2918.         CH = DMA channel (04h = no DMA)
  2919.         SI = size of FIFO in bytes (0000h = use DMA)
  2920.         nonzero failed (not supported or already in use)
  2921.     AH may be destroyed
  2922. Range:    AH=CDh-ECh, selected by scanning for an available multiplex number
  2923. SeeAlso: AX=CD00h"InterWave",AX=CD01h"InterWave",AX=CD02h"InterWave"
  2924. SeeAlso: AX=CD05h"InterWave",AX=CD22h"InterWave",AX=CD80h"InterWave"
  2925.  
  2926. (Table 2707)
  2927. Call MIDISIMPLE with:
  2928.     EAX = function number
  2929.         0001h MIDI byte out
  2930.         BL = MIDI byte to send
  2931.         0002h MIDI string out
  2932.         ECX = length of MIDI string in bytes
  2933.         ES:EDI -> MIDI string to send (should not include timing info)
  2934.     DX = device handle
  2935.     INT xxh (as returned by AX=CD21h)
  2936. Return: EAX = status
  2937.         00000000h if successful
  2938.         FFFFFFFFh on error (bad handle)
  2939. SeeAlso: #2708,INT 7E/AX=0001h"IWSBSDRV",INT 7E/AX=0002h"IWSBSDRV"
  2940.  
  2941. (Table 2708)
  2942. Call MIDICOMPLEX with:
  2943.     EAX = function number
  2944.         ??? (specification is still in development)
  2945.     DX = device handle
  2946.     INT xxh (as returned by AX=CD21h)
  2947. Return: EAX = status
  2948.         00000000h if successful
  2949.         FFFFFFFFh on error (bad handle)
  2950. SeeAlso: #2707
  2951. --------s-2FCD22-----------------------------
  2952. INT 2F R - InterWave Game API - CLOSE GAME DEVICE
  2953.     AX = CD22h
  2954.     BX = installed program identifier
  2955.     DX = device handle (from AX=CD21h)
  2956. Return: AL = status
  2957.         00h successful
  2958.         FFh inavlid handle or device is not open
  2959. Range:    AH=CDh-ECh, selected by scanning for an available multiplex number
  2960. SeeAlso: AX=CD00h"InterWave",AX=CD01h"InterWave",AX=CD02h"InterWave"
  2961. SeeAlso: AX=CD05h"InterWave",AX=CD21h"InterWave",AX=CD80h"InterWave"
  2962. --------s-2FCD80-----------------------------
  2963. INT 2F RC - InterWave Game API - MIXER SETTINGS CHANGED BROADCAST
  2964.     AX = CD80h
  2965. Return: nothing
  2966. Desc:    called by an application controlling the InterWave chip's mixer
  2967.       whenever the mixer's settings are changed
  2968. Range:    AH=CDh-ECh, selected by scanning for an available multiplex number
  2969. Note:    when an application intercepts this function call, it must read the
  2970.       new mixer settings from the InterWave chip
  2971. SeeAlso: AX=CD00h"InterWave",AX=CD01h"InterWave",AX=CD02h"InterWave"
  2972. SeeAlso: AX=CD05h"InterWave",AX=CD21h"InterWave",AX=CD22h"InterWave"
  2973. --------K-2FCF00-----------------------------
  2974. INT 2F - TEMPLEXX 1.0 - INSTALLATION CHECK
  2975.     AX = CF00h
  2976. Return: AL = FFh if installed
  2977. Program: TEMPLEXX is a popup keyboard template by Henson Scientific, Inc.
  2978. Note:    values in AL other than 00h cause an immediate return without modifying
  2979.       any registers
  2980. --------G-2FD000-----------------------------
  2981. INT 2F C - MDEBUG display driver - GET DRIVER STATUS
  2982.     AX = D000h
  2983. Return: CF set on error
  2984.         all other registers must be unchanged)
  2985.     CF clear if successful
  2986.         AL = FFh
  2987.         AH = driver semaphor
  2988.         00h driver is not active
  2989.         01h driver is active
  2990.         BX = CS of the driver
  2991.         CX = driver version (CH = major, CL = minor, must be >= 013Ch)
  2992.         DL = buffer semaphor
  2993.         00h driver is not pending
  2994.         01h driver is pending between functions 02h and 03h
  2995.         DH = show semaphor
  2996.         00h driver is not pending
  2997.         01h driver is pending between functions 04h and 05h
  2998. Program: MDEBUG is a shareware memory-resident debugging tool by Bernd
  2999.       Schemmer, including a memory monitor, an interpreter and a
  3000.       disassembler
  3001. Range:    AH=C0h to AH=FFh, selected by switch or programmatically
  3002. Notes:    MDEBUG can use any two consecutive multiplex numbers between C0h and
  3003.       FFh; the default is D0h for the display driver and D1h for the
  3004.       command driver (call INT 60/AH=00h"MDEBUG" for the actual multiplex
  3005.       numbers used)
  3006.     this function MUST be reentrant, as MDEBUG calls it after every popup
  3007.       before any other actions.  The handler should not change any
  3008.       registers if the display is in an unsupported mode or in a mode
  3009.       MDEBUG supports itself, e.g. a normal text mode with at least 80x25
  3010.       characters (i.e. 80x43 or 132x44 (v1.60+)). In this case MDEBUG will
  3011.       not call any of the other functions for this popup session.
  3012.     MDEBUG will not call the other functions if the returned version is
  3013.       less than the actual version of MDEBUG.
  3014.     if the driver is reentrant, DL and DH should be 00h
  3015. SeeAlso: AX=D001h,AX=D002h,AX=D003h,AX=D004h,AX=D005h
  3016. --------M-2FD000-----------------------------
  3017. INT 2F - ZWmous - INSTALLATION CHECK
  3018.     AX = D000h
  3019. Return: AX = 5A57h ("ZW") if installed
  3020.         BX = segment of resident code
  3021. Program: ZWmous is a shareware TSR by Zen Wu which permits the use of a mouse
  3022.       with many non-mouse applications by entering the letter under the
  3023.       mouse cursor on button presses
  3024. SeeAlso: INT 33/AX=0003h
  3025. --------N-2FD000-----------------------------
  3026. INT 2F - Lotus CD/Networker - INSTALLATION CHECK
  3027.     AX = D000h
  3028. Return: AL = FFh if CD/Networker TSR is loaded
  3029.     BX = 4D44h ("MD") signature
  3030.     CX = Windows mode word (from INT 2F/AX=1600h) at time of TSR load
  3031.     DX = bitmap identifying all loaded CD/Networker TSRs.
  3032. Notes:    INT 2F/AH=D0h is used by CD/Networker to communicate between a
  3033.       resident redirector TSR and a transient program that controls the
  3034.       TSR's CD-ROM drive emulation (volume attachments, caching, etc).
  3035.     At present there is only one CD/Networker TSR; the bitmap always = 4.
  3036. SeeAlso: AX=D002h"Lotus",INT 2F/AX=1500h"CD-ROM"
  3037. --------G-2FD001-----------------------------
  3038. INT 2F C - MDEBUG display driver - INITIALIZE DRIVER
  3039.     AX = D001h
  3040. Return: CF set on error
  3041.     AL = driver semaphor
  3042.     AH = buffer semaphor
  3043. Range:    AH=C0h to AH=FFh, selected by switch or programmatically
  3044. Notes:    MDEBUG calls this function after every successful call of the function
  3045.       00h. The function should reset all internal data and the status of
  3046.       the driver. If this function returns an error, MDEBUG will not call
  3047.       the other functions in this popup session.
  3048.     MDEBUG can use any two consecutive multiplex numbers between C0h and
  3049.       FFh; the default is D0h for the display driver and D1h for the
  3050.       command driver
  3051. SeeAlso: AX=D000h
  3052. --------G-2FD002-----------------------------
  3053. INT 2F C - MDEBUG display driver - SAVE GRAPHIC DATA
  3054.     AX = D002h
  3055. Return: CF set on error
  3056.     CF clear if successful
  3057.         display memory saved and display switched to one of the text modes
  3058.           02h, 03h or 07h.
  3059. Note:    MDEBUG calls this function only once every popup session before
  3060.       displaying its windows.
  3061. SeeAlso: AX=D000h,AX=D003h
  3062. --------N-2FD002BX4D44-----------------------
  3063. INT 2F - Multiplex - Lotus CD/Networker GET DATA AREA
  3064.     AX = D002h
  3065.     BX = 4D44h
  3066.     DX = bitmap identifying one loaded CD/Networker TSR
  3067. Return: ES:DI -> data area owned by TSR
  3068. Note:    the format of the data area changes with each minor revision, so it
  3069.       cannot be counted on
  3070. SeeAlso: AX=D000h"Lotus"
  3071. --------G-2FD003-----------------------------
  3072. INT 2F C - MDEBUG display driver - RESTORE GRAPHIC DATA
  3073.     AX = D003h
  3074. Return: CF set on error
  3075.     CF clear if successful
  3076.         display restored to the mode it was in before calling AX=D002h and
  3077.           the display memory is restored
  3078. Note:    MDEBUG calls this function only once every popup session just before
  3079.      it exits to normal DOS.
  3080. SeeAlso: AX=D000h,AX=D002h
  3081. --------G-2FD004-----------------------------
  3082. INT 2F - MDEBUG display driver - SHOW SAVED DATA
  3083.     AX = D004h
  3084. Return: CF set on error
  3085.     CF clear if successful
  3086.         display switched to mode it was in before calling AX=D002h and the
  3087.           display memory is restored
  3088. Note:    This function needn't save the display memory before changing it.
  3089. SeeAlso: AX=D000h,AX=D005h
  3090. --------G-2FD005-----------------------------
  3091. INT 2F - MDEBUG display driver - SWITCH BACK TO TEXT SCREEN
  3092.     AX = D005h
  3093. Return: CF set on error
  3094.     CF clear if successful
  3095.         display restored to mode it was in before calling AX=D004h
  3096. Note:    This function needn't save or change the display memory
  3097. SeeAlso: AX=D000h,AX=D004h
  3098. --------G-2FD0-------------------------------
  3099. INT 2F - MDEBUG display driver - RESERVED FUNCTION NUMBERS
  3100.     AH = D0h
  3101.     AL = 06h-7Fh
  3102. Note:    these functions are reserved for future use
  3103. --------G-2FD0-------------------------------
  3104. INT 2F - MDEBUG display driver - USER DEFINED FUNCTION NUMBERS
  3105.     AH = D0h
  3106.     AL = 80h-FFh
  3107. Note:    these functions numbers are reserved for user defined features (e.g.
  3108.       communication between the transient und resident parts of the driver)
  3109. --------G-2FD100-----------------------------
  3110. INT 2F C - MDEBUG command driver - GET STATUS
  3111.     AX = D100h
  3112.     BX = version of MDEBUG (BH = major, BL = minor)
  3113.     CX = command driver counter
  3114. ---v1.60+---
  3115.     DS:SI -> MDEBUG identification table (see #2709)
  3116.     ES = segment of display memory used by MDEBUG
  3117.     DI = size of video mode used by MDEBUG
  3118.         (high byte = lines, low byte = columns)
  3119. Return: DL = FFh
  3120.     BX = version number of the driver if it is less than the version in BX,
  3121.           else unchanged
  3122.     CX incremented
  3123. Program: MDEBUG is a shareware memory-resident debugging tool by Bernd
  3124.       Schemmer, including a memory monitor, an interpreter, and a
  3125.       disassembler
  3126. Range:    AH=C0h to AH=FFh, selected by switch or programmatically
  3127. Notes:    called by MDEBUG at start of popup session; if the version number
  3128.       returned in BX is less than 1.52 (1.60 for MDEBUG v1.70), MDEBUG will
  3129.       not call any of the other functions during this popup session
  3130.     MDEBUG can use any two consecutive multiplex numbers between C0h and
  3131.       FFh; the default is D0h for the display driver and D1h for the
  3132.       command driver (call INT 60/AH=00h"MDEBUG" for the multiplex numbers
  3133.       actually used)
  3134.     this function must end with a far call to the old INT 2F handler after
  3135.       changing the registers
  3136.     this function MUST be reentrant
  3137.     command drivers must also declare the following data at the given
  3138.       offsets in the code segment
  3139.         100h  3 BYTEs    JMP-command in .COM-files
  3140.         103h    BYTE    NOP-command (90h)
  3141.         104h 26 BYTEs    signature "Kommandotreiber für MDEBUG"
  3142.         11Eh 12 BYTEs    name of driver, e.g. "MDHISDRV.COM"
  3143.                 each driver must have a unique name
  3144.     MDEBUG will pass every key and command to the command driver(s) before
  3145.       checking for a valid internal command
  3146. SeeAlso: AX=D000h,AX=D101h
  3147.  
  3148. Format of MDEBUG identification table:
  3149. Offset    Size    Description    (Table 2709)
  3150.  -2    WORD    entry offset
  3151.  00h    WORD    CS of MDEBUG
  3152.  02h    DWORD    old INT 08h vector
  3153.  06h    DWORD    old INT 09h vector
  3154.  0Ah    DWORD    address INT 16h routine used by MDEBUG
  3155.  0Eh    BYTE    length of version string
  3156.  0Fh  N BYTEs    version string
  3157. --------G-2FD101-----------------------------
  3158. INT 2F - MDEBUG command driver - INITIALIZE DRIVER
  3159.     AX = D101h
  3160.     CX = command driver counter
  3161. Return: DL = status
  3162.         FFh if successful
  3163.         CX incremented
  3164.         else error: all registers unchanged
  3165. Note:    this function must end with a  far call to the old INT 2F handler after
  3166.       changing the registers
  3167.     this function must be reentrant
  3168. --------G-2FD102-----------------------------
  3169. INT 2F - MDEBUG command driver - EXECUTE INTERPRETER COMMAND
  3170.     AX = D102h
  3171.     BL = first character of the interpreter command
  3172.     BH = last character of the interpreter command (or blank)
  3173.     DS:SI -> parameter for the interpreter command as ASCIZ string
  3174.     DS:DI -> MDEBUG data structure (see #2711)
  3175. Return: AL = FFh
  3176.     CF set on error
  3177.         AH = error number (see #2710)
  3178.         DS:SI -> ASCIZ error message (max 30 characters) if AH=0Ch
  3179.     CF clear if successful
  3180.         AH = return code
  3181.         00h continue processing the command line
  3182.         01h leave MDEBUG popup session
  3183.         02h leave MDEBUG popup session and automatically popup again
  3184.               if the InDOS flag is zero
  3185.         03h not used (same as 00h)
  3186.         04h not used (same as 00h)
  3187.         05h put new command line into the input buffer,
  3188.             DS:SI -> new command line (ASCIZ string, max 66 chars)
  3189.         06h process new command line
  3190.             DS:SI -> new command line (ASCIZ string, max 66 chars)
  3191.            else unknown status, but continue processing commmand line
  3192. Note:    this function must end with a far call to the old INT 2F handler (with
  3193.       registers unchanged) if the driver does not support the interpreter
  3194.       command in BX.  Otherwise, the driver must not chain to the old
  3195.       INT 2F.
  3196.  
  3197. (Table 2710)
  3198. Values for MDEBUG error number:
  3199.  01h    syntax error
  3200.  02h    first shell of the command.com is activ
  3201.  03h    Esc pressed
  3202.  04h    break pressed
  3203.  05h    DOS is busy
  3204.  06h    command ended
  3205.  07h    division by zero
  3206.  08h    invalid display driver
  3207.  09h    invalid command driver
  3208.  0Ah    error 8 and 9
  3209.  0Bh    unknown error
  3210.  0Ch    new error
  3211.  else    unknown error
  3212.  
  3213. Format of MDEBUG data structure:
  3214. Offset    Size    Description    (Table 2711)
  3215.  00h    WORD    register SE
  3216.  02h    WORD    register OF
  3217.  04h    WORD    register FS
  3218.  06h    WORD    register FO
  3219.  08h    WORD    register AX
  3220.  0Ah    WORD    register BX
  3221.  0Ch    WORD    register CX
  3222.  0Eh    WORD    register DX
  3223.  10h    WORD    register SI
  3224.  12h    WORD    register DI
  3225.  14h    WORD    register DS
  3226.  16h    WORD    register ES
  3227.  18h    WORD    register BP
  3228.  1Ah    WORD    register SS
  3229.  1Ch    WORD    register SP
  3230.  1Eh    WORD    register FL (flags)
  3231.  20h    WORD    register R0
  3232.  22h    WORD    register R1
  3233.  24h    WORD    register R2
  3234.  26h    WORD    register R3
  3235.  28h    WORD    register R4
  3236.  2Ah    WORD    register R5
  3237.  2Ch    WORD    register R6
  3238.  2Eh    WORD    register R7
  3239.  30h    WORD    register R8
  3240.  32h    WORD    register CS, return-address
  3241.  34h    WORD    register IP, return-address
  3242.  36h    DWORD    saved pointer to data for key <F6> (v1.60)
  3243.         saved monitor address (v1.70)
  3244.  3Ah 12 WORDs    saved register values on last popup entry (for <F8> key)
  3245.         (original register values at popup entry of MDEBUG)
  3246.         AX, BX, CX, DX, SI, DI, DS, ES, BP, SS, SP, flags
  3247.  52h 12 WORDs    saved register values on last popup exit (for <SHIFT-F8> key)
  3248.         AX, BX, CX, DX, SI, DI, DS, ES, BP, SS, SP, flags
  3249.  6Ah    DWORD    address of the DOS-invars-table
  3250.  6Eh    DWORD    address of the InDOS flag
  3251.  72h    WORD    offset of the register which is used for the segment of the
  3252.           first monitor window
  3253.  74h    WORD    offset of the register which is used for the offset of the
  3254.           first monitor window
  3255.  76h    WORD    name of the register which is used for the segment of the
  3256.           first monitor segment
  3257.  78h    WORD    name of the register which is used for the offset of the first
  3258.           monitor window
  3259.  7Ah    WORD    pseudo register 1
  3260.  7Ch    WORD    pseudo register 2
  3261. --------G-2FD103-----------------------------
  3262. INT 2F - MDEBUG command driver - EXECUTE KEY IN THE MONITOR
  3263.     AX = D103h
  3264.     BX = key code (like result of an interrupt 16h call)
  3265.     CX = cursor position
  3266.         0000h in the ASCII column of the monitor
  3267.         0001h in one of the hex fields of the monitor
  3268.     DS:SI -> MDEBUG data structure (see #2711)
  3269.     ES:DI -> actual byte in the monitor
  3270. Return: AL = FFh
  3271.     AH = return code
  3272.         00h key processed, read next key
  3273.         01h leave MDEBUG popup session
  3274.         02h leave MDEBUG popup session and automatically popup again if DOS
  3275.           is not busy
  3276.         03h signal an error (beep)
  3277.         04h driver has redefined the key, proceed with the new key
  3278.         BX = new key code
  3279.         MDEBUG will not pass the new key to the command driver(s)
  3280.        else treat like code 00h
  3281. Note:    this function must end with a far call to the old INT 2F handler (with
  3282.       registers unchanged) if the driver does not support the key in BX.
  3283.       Otherwise, the driver must not chain to the old INT 2F.
  3284. SeeAlso: AX=D104h
  3285. --------G-2FD104-----------------------------
  3286. INT 2F - MDEBUG command driver - EXECUTE KEY IN THE INTERPRETER
  3287.     AX = D104h
  3288.     DS:SI -> MDEBUG data structure (see #2711)
  3289. Return: AL = FFh
  3290.     AH = return code
  3291.         00h key processed, read next key
  3292.         01h leave MDEBUG popup session
  3293.         02h leave MDEBUG popup session and automactically popup again if
  3294.           DOS is not busy
  3295.         03h signal an error (beep)
  3296.         04h driver has redefined the key, proceed with the new key
  3297.         BX = new key code
  3298.         MDEBUG won't pass the new key to the command driver(s)
  3299.         05h put new command line into the input buffer
  3300.         DS:SI -> new command line (ASCIZ string, max 66 chars)
  3301.         06h process new command line
  3302.         DS:SI -> new command line (ASCIZ string, max 66 chars)
  3303.        else treat like code 00h
  3304. Note:    this function must end with a far call to the old INT 2F handler if the
  3305.       driver does not support the key in BX.  Otherwise, the driver must
  3306.       not chain to the old INT 2F.
  3307. SeeAlso: AX=D103h
  3308. --------G-2FD1-------------------------------
  3309. INT 2F - MDEBUG command driver - RESERVED FUNCTIONS
  3310.     AH = D1h
  3311.     AL = 05h-0Ah
  3312. Note:    these functions are reserved for future use
  3313. --------G-2FD110-----------------------------
  3314. INT 2F - MDEBUG command driver - GET ADDRESS OF THE OLD INT 2F
  3315.     AX = D110h
  3316. Return: DL = FFh
  3317.     ES:BX -> next program in the chain for INT 2F
  3318.     CX = code segment of this driver
  3319.     DI = offset of driver identification table (see #2712) (v1.60+)
  3320. Notes:    only called by the transient part of the driver
  3321.     must be reentrant and the driver must not chain this function to the
  3322.       old INT 2F
  3323.  
  3324. Format of the MDEBUG driver identification table:
  3325. Offset    Size    Description    (Table 2712)
  3326.  00h  26 BYTEs     signature "Kommandotreiber für MDEBUG"
  3327.                          ^- Note: ASCII 129,German U-umlaut
  3328.  27h  12 BYTEs     name of driver, e.g. "MDHISDRV.COM"
  3329.          each driver must have a unique name
  3330. --------G-2FD111-----------------------------
  3331. INT 2F - MDEBUG command driver - START DRIVER
  3332.     AX = D111h
  3333. Return: DL = FFh
  3334. Notes:    only called by the transient part of the driver to inform the resident
  3335.       part that it is installed
  3336.     the function must be reentrant and the driver mustn't chain this
  3337.       function to the old INT 2F
  3338. SeeAlso: AX=D101h,AX=D112h
  3339. --------G-2FD112-----------------------------
  3340. INT 2F - MDEBUG command driver - END DRIVER
  3341.     AX = D112h
  3342. Return: DL = FFh
  3343. Notes:    only called by the transient part of the driver to inform the resident
  3344.       part that it will be released after this function
  3345.     the function must be reentrant and the driver mustn't chain this
  3346.       function to the old INT 2F
  3347. SeeAlso: AX=D101h,AX=D111h
  3348. --------G-2FD1-------------------------------
  3349. INT 2F - MDEBUG command driver - RESERVED FUNCTIONS
  3350.     AH = D1h
  3351.     AL = 13h-7Fh
  3352. Note:    these functions are reserved for future use
  3353. --------G-2FD1-------------------------------
  3354. INT 2F - MDEBUG command driver - USER DEFINED FUNCTIONS
  3355.     AH = D1h
  3356.     AL = 80h-FFh
  3357. Note:    these functions are reserved for user defined features (e.g.
  3358.       communication between the transient und resident parts of the driver)
  3359. --------U-2FD200-----------------------------
  3360. INT 2F - PCL-838.EXE - INSTALLATION CHECK
  3361.     AX = D200h
  3362. Return: AL = FFh if installed??? (documented as AX = return value)
  3363. Program: PCL-838 is a resident utility for controlling a stepmotor adapter
  3364.       board by Advantec
  3365. SeeAlso: AX=D201h"PCL-838",AX=D202h"PCL-838"
  3366. --------Q-2FD200BX5144-----------------------
  3367. INT 2F - Quarterdeck RPCI - INSTALLATION CHECK
  3368.     AX = D200h
  3369.     BX = 5144h ("QD")
  3370.     CX = 4D45h ("ME")
  3371.     DX = 4D30h ("M0")
  3372. Return: AL = FFh installed
  3373.     if BX,CX,DX registers were as specified on entry:
  3374.         BX = 4D45h ("ME")
  3375.         CX = 4D44h ("MD")
  3376.         DX = 5652h ("VR")
  3377. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  3378. Notes:    the Quarterdeck RPCI (Resident Program Communication Interface) is
  3379.       supported by QEMM v5.0+, QRAM, MANIFEST, VIDRAM, etc.
  3380.     for AL <> 0, if the BX/CX/DX values don't match the identifier of a
  3381.       Quarterdeck product, it just chains to the previous INT 2F handler
  3382. SeeAlso: AX=D201h/BX=4849h,AX=D201h/BX=4D41h,AX=D201h/BX=4D45h
  3383. SeeAlso: AX=D201h/BX=5145h,AX=D201h/BX=5649h
  3384. --------U-2FD201-----------------------------
  3385. INT 2F - PCL-838.EXE - UNINSTALL
  3386.     AX = D201h
  3387. Return: AX = return value
  3388. SeeAlso: AX=D200h"PCL-838",AX=D202h"PCL-838"
  3389. --------m-2FD201BX4849-----------------------
  3390. INT 2F - Quarterdeck RPCI - GET QD HIMEM PRESENCE
  3391.     AX = D201h
  3392.     BX = 4849h ("HI")
  3393.     CX = 4D45h ("ME")
  3394.     DX = 4D51h ("MQ")
  3395. Return: BX = 4F4Bh ("OK")
  3396.     ES:DI -> HIMEM entry point
  3397. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  3398. SeeAlso: AX=D200h,AX=D201h/BX=5145h
  3399. --------m-2FD201BX4849-----------------------
  3400. INT 2F - Quarterdeck RPCI - QEMM/QRAM v5.0+ - GET HIRAM MEMORY CHAIN
  3401.     AX = D201h
  3402.     BX = 4849h ("HI")
  3403.     CX = 5241h ("RA")
  3404.     DX = 4D30h ("M0")
  3405. Return: BX = 4F4Bh ("OK")
  3406.     CX = segment of start of HIRAM chain
  3407.     DX = reserved block owner (QEMM/QRAM code segment)
  3408. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  3409. Note:    the HIRAM memory chain has the same format as the regular DOS 4.0
  3410.       memory chain (see #1280 at INT 21/AH=52h), except that XMS Upper
  3411.       Memory Blocks have the block header program name field set to
  3412.       "UMB"; blocks whose "owner" field is set to the reserved segment
  3413.       returned in DX are locked-out regions such as video memory and ROMs.
  3414. SeeAlso: AX=12FFh/BX=0006h,AX=D200h
  3415. --------G-2FD201BX4D41-----------------------
  3416. INT 2F U - Quarterdeck RPCI - MANIFEST v1.0+ - INSTALLATION CHECK
  3417.     AX = D201h
  3418.     BX = 4D41h ("MA")
  3419.     CX = 4E49h ("NI")
  3420.     DX = 4645h ("FE")
  3421. Return: BX = 5354h ("ST") if installed
  3422. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  3423. SeeAlso: AX=D200h
  3424. --------E-2FD201BX4D45-----------------------
  3425. INT 2F U - Quarterdeck RPCI - DVDOS4GX.DVR - ???
  3426.     AX = D201h
  3427.     BX = 4D45h ("ME")
  3428.     CX = 5155h ("QU")
  3429.     DX = 5044h ("PD")
  3430. Return: AL = FFh
  3431.     BX = 4F4Bh ("OK")
  3432. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  3433. Note:    this function is called by QEMM 6.03
  3434.     performs a variety of actions before setting return registers
  3435. SeeAlso: AX=D200h
  3436. --------m-2FD201BX5145-----------------------
  3437. INT 2F - Quarterdeck RPCI - QEMM v5.0+ - INSTALLATION CHECK
  3438.     AX = D201h
  3439.     BX = 5145h ("QE")
  3440.     CX = 4D4Dh ("MM")
  3441.     DX = 3432h ("42")
  3442. Return: BX = 4F4Bh ("OK")
  3443.     ES:DI -> QEMM API entry point (see INT 67/AH=3Fh)
  3444. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  3445. Note:    this call is not available under QEMM v6.00 unless Windows3 support
  3446.       has been disabled with the NW3 switch to QEMM386.SYS
  3447. SeeAlso: AX=D200h,AX=D201h/BX=4849h,INT 67/AH=3Fh
  3448. --------V-2FD201BX5649-----------------------
  3449. INT 2F u - Quarterdeck RPCI - VIDRAM v5.0+ - INSTALLATION CHECK
  3450.     AX = D201h
  3451.     BX = 5649h ("VI")
  3452.     CX = 4452h ("DR")
  3453.     DX = 414Dh ("AM")
  3454. Return: BX = 4F4Bh ("OK")
  3455.     ES:DI -> VIDRAM entry point (see #2713)
  3456. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  3457. SeeAlso: AX=D200h
  3458.  
  3459. (Table 2713)
  3460. Call VIDRAM entry point with:
  3461.     AH = 00h get status
  3462.         Return: AL = VIDRAM state (see #2714)
  3463.             BL = extra RAM status (see #2715)
  3464.             BH = feature flags (see #2716)
  3465.             CL = current monitor (01h = mono, 80h = color)
  3466.             SI = current top of memory (paragraph)
  3467.             DI = segment of start of HiRAM chain
  3468.     AH = 01h setup
  3469.         AL = VIDRAM state (see #2714)
  3470.         BL = extra RAM status (see #2715)
  3471.         BH = feature flags (see #2716)
  3472.         CL = monitor (01h = monochrome, 80h = color)
  3473.         SI = new top of memory (paragraph)
  3474.         DI = segment of start of HiRAM chain
  3475.     AH = 02h get end address of VIDRAM code
  3476.         Return: ES:DI -> VIDRAM partial map context (see #2717,#2718)
  3477. Return: CF set on error
  3478.     CF clear if successful
  3479.  
  3480. (Table 2714)
  3481. Values for VIDRAM state:
  3482.  00h    off
  3483.  01h    no EGA graphics
  3484.  02h    no graphics at all
  3485.  
  3486. (Table 2715)
  3487. Values for VIDRAM extra RAM status:
  3488.  00h    VIDRAM does not use extra RAM
  3489.  01h    VIDRAM uses EMS as extra RAM
  3490.  02h    VIDRAM uses EGA as extra RAM
  3491.  
  3492. Bitfields for VIDRAM feature flags:
  3493. Bit(s)    Description    (Table 2716)
  3494.  0    override enabled
  3495.  1    mapped memory detected in A000h-B000h range
  3496.  2    top of memory not at 640K
  3497.  3    MDA detected
  3498.  4    high RAM exists in video area
  3499.  5    mapped memory detected in video area
  3500.  6-7    reserved???
  3501.  
  3502. Format of VIDRAM partial map context (EMS 3.2):
  3503. Offset    Size    Description    (Table 2717)
  3504.  00h    BYTE    EMS version ID (32h)
  3505.  01h    WORD    EMM handle for this entry
  3506.  03h    BYTE    number of frames
  3507.  04h    BYTE    first page frame
  3508.  05h    WORD    offset from ES to previously saved map
  3509.  
  3510. Format of VIDRAM partial map context (EMS 4.0):
  3511. Offset    Size    Description    (Table 2718)
  3512.  00h    BYTE    EMS version ID (40h)
  3513.  01h    WORD    mappable segment count
  3514.  03h  N WORD    mappable segments
  3515.     WORD    offset to previously saved map???
  3516. --------U-2FD202-----------------------------
  3517. INT 2F - PCL-838.EXE - EXECUTE PCL838 COMMANDS
  3518.     AX = D202h
  3519.     CX:BX -> parameter table
  3520. Return: AX = return value
  3521. SeeAlso: AX=D200h"PCL-838",AX=D201h"PCL-838"
  3522. --------R-2FD300BX4562-----------------------
  3523. INT 2F U - TeleReplica - INSTALLATION CHECK
  3524.     AX = D300h
  3525.     BX = 4562h
  3526.     CX = 2745h
  3527.     DX = serial port I/O base address??? (03F8h for v3.9)
  3528. Return: SI = segment of resident code
  3529.     AX = 251Dh
  3530.     BX = DF21h
  3531.     CX = F321h
  3532.     DX = ???
  3533. --------R-2FD3CB-----------------------------
  3534. INT 2F U - LapLink Quick Connect v6 - API
  3535.     AX = D3CBh
  3536.     CX = function
  3537.         0002h get ???
  3538.         Return: BX:AX -> ???
  3539.             CL = ???
  3540.             CH = ???
  3541.             DX = ???
  3542.             DI = COM1 I/O port???
  3543.             SI = COM2 I/O port???
  3544.         0003h initialization???
  3545.         0004h ???
  3546.         0005h initialization???
  3547.         0006h reset/clear ???
  3548.         Return: AX = 0000h
  3549.             ES:DI -> next byte after ??? cleared by this call
  3550.         0007h initialization???
  3551.         0008h uninstall
  3552.         Return: BX = status
  3553.                 0000h successful
  3554.                 FFFFh incomplete, stub remains in memory
  3555. Return: CX = 534Bh (except function 0002h)
  3556. Index:    uninstall;LapLink Quick Connect
  3557. --------K-2FD3D3BH00-------------------------
  3558. INT 2F - KDRIVE v2.x - INSTALLATION CHECK
  3559.     AX = D3D3h
  3560.     BH = 00h
  3561. Return: BX = 3D3Dh if installed
  3562.     CF clear if installed
  3563.         AX = driver ID??? (returns 0087h for KDRIVE.EXE and 0880h for
  3564.           KDRIVOS2.EXE in one examined version)
  3565. Program: KDRIVE is a shareware extended German keyboard driver by Martin
  3566.       Austermeier, originally based on K3 by Martin Gerdes as published
  3567.       in c't magazine 7/1988
  3568. --------l-2FD44D-----------------------------
  3569. INT 2F - 4DOS.COM v2.1+ - API
  3570.     AX = D44Dh
  3571.     BH = function
  3572.         00h installation check
  3573.         Return: AX = 44DDh
  3574.             BL = major version number
  3575.             BH = minor version number
  3576.             CX = PSP segment address for current invocation
  3577.             DL = 4DOS shell number (0 for the first (root) shell,
  3578.                   updated each time a new copy is loaded)
  3579.         01h (internal, v2.1-3.03) terminate current copy of 4DOS
  3580.         Return: nothing
  3581.         (internal, v4.0+) ???
  3582.         Return: AX = 44DDh
  3583.             ES:BX -> data area (see #2719)
  3584.         02h ???
  3585.         DX = ???
  3586.         Note:    v5.52 signals "unrecoverable error" and then terminates
  3587.               with INT 21/AH=4Ch or enters a deliberate infinite
  3588.               loop if ???
  3589.     ---v2.1-3.03 only---
  3590.         03h EXEC program
  3591.         CX:DX -> EXEC record (see #2720)
  3592.         FEh deallocate shell number (passed through to root shell)
  3593.         ???
  3594.         FFh allocate shell number (passed through to root shell)
  3595.     ---v5.52---
  3596.         03h get ???
  3597.         BL = ??? (00h/01h)
  3598.         Return: DX = current value of ???
  3599.         04h set ???
  3600.         BL = ??? (00h/01h)
  3601.         DX = new value for ???
  3602. Note:    a bug in v3.00 will crash the system if unrecognized value in BH
  3603. SeeAlso: AX=D44Eh,AX=D44Fh/BX=0000h,AX=E44Dh,INT 21/AX=4403h"DOS"
  3604. Index:    installation check;4DOS|installation check;NDOS
  3605.  
  3606. Format of 4DOS v4.0 data area:
  3607. Offset    Size    Description    (Table 2719)
  3608.  00h  2 BYTEs    ???
  3609.  06h    WORD    XMS handle for swapping
  3610.     ???
  3611. SeeAlso: #2720
  3612.  
  3613. Format of 4DOS EXEC v2.1-v3.03 record:
  3614. Offset    Size    Description    (Table 2720)
  3615.  00h    WORD    offset of ASCIZ program name in same segment as EXEC record
  3616.  02h    WORD    offset of DOS commandline in same segment as EXEC record
  3617.  04h    WORD    segment of environment for child process (see INT 21/AH=26h)
  3618. SeeAlso: #2719
  3619. --------l-2FD44E-----------------------------
  3620. INT 2F C - 4DOS v3.0+ - AWAITING USER INPUT
  3621.     AX = D44Eh
  3622. ---4DOS v3.01+---
  3623.     BX = condition
  3624.         0000h 4DOS is ready to display prompt
  3625.         0001h 4DOS has displayed the prompt, about to accept user input
  3626. Return: the handler must preserve SI, DI, BP, SP, DS, ES, and SS
  3627. Note:    v3.00 only makes the call corresponding to BX=0001h, does not set BX
  3628. SeeAlso: AX=D44Dh
  3629. --------K-2FD44FBX0000-----------------------
  3630. INT 2F - 4DOS v4.0+ - KSTACK.COM - INSTALLATION CHECK
  3631.     AX = D44Fh
  3632.     BX = 0000h
  3633. Return: AX = 44DDh if installed
  3634. Note:    this function is also supported by ANSIPLUS v3.01+ and K3PLUS v6.20+,
  3635.       which emulate the 4DOS and NDOS keystack
  3636. SeeAlso: AX=D44Dh,AX=D44Fh/BX=0001h,AX=E44Fh/BX=0000h
  3637. --------K-2FD44FBX0001-----------------------
  3638. INT 2F - 4DOS v4.0+ - KSTACK.COM - PLACE KEYSTROKES INTO KEYSTACK
  3639.     AX = D44Fh
  3640.     BX = 0001h
  3641.     CX = number of keystrokes (01h-FFh)
  3642.     DS:DX -> keystroke list (one word per keystroke)
  3643. Return: AX = status
  3644.         0000h successful
  3645.         nonzero failed
  3646.     BX,CX,DX destroyed
  3647. Notes:    the keystrokes are the exact values to return from subsequent calls to
  3648.       INT 16 with AH=00h,01h,10h, or 11h, with the following exceptions:
  3649.         0000h causes subfunctions 01h and 11h to indicate an empty
  3650.               keyboard buffer
  3651.         FFFFh is followed by a word indicating the number of clock
  3652.               ticks to delay before the next faked keystroke
  3653.     v4.00 KSTACK overwrites any unread keystrokes from the previous
  3654.       invocation, and does not range-check CX; it will overwrite memory
  3655.       following the resident portion if CX is greater than 100h.
  3656.     this function is also supported by ANSIPLUS v3.01+ and K3PLUS v6.20+,
  3657.       which emulate the 4DOS and NDOS keystack
  3658. SeeAlso: AX=D44Dh,AX=D44Fh/BX=0000h,INT 16/AH=00h,INT 21/AX=4403h"DOS"
  3659. --------G-2FD600-----------------------------
  3660. INT 2F - HEART.COM - INSTALLATION CHECK
  3661.     AX = D600h
  3662. Return: AX = 0303h (two hearts) if installed
  3663.         ES:DI -> buffer (see #2721)
  3664. Program: HEART.COM is a CPU lock-up/critical indicator utility by Mitch Davis.
  3665. Notes:    Once the host program has identified the address of the data area, it
  3666.       can change this to indicate safe/critical, alternate colours, etc.
  3667.     The entries for the color table are in char/attrib form.  Every two
  3668.       entries form a pair which is alternated between 68 times a minute.
  3669.       The first half of the table is for color videos, the second mono.
  3670.       Within each half, the first half is for the safe chars, and the
  3671.       second for the critical chars.
  3672.  
  3673. Format of HEART.COM buffer:
  3674. Offset    Size    Description    (Table 2721)
  3675.  00h  8 WORDs    table of colors/attributes (refer to notes above)
  3676.  10h    BYTE    flags
  3677.         bit 0: program is in critical section, so flash double
  3678.               exclamation mark
  3679.         bit 1: program is in safe code, so flash the heart character
  3680.  11h    WORD    position of heartbeat on screen, normally 009Eh (last column
  3681.         of second line)
  3682. --------T-2FD600-----------------------------
  3683. INT 2F U - VEDIT VSWAP - INSTALLATION CHECK
  3684.     AX = D600h
  3685. Return: AL = D6h if installed
  3686. Program: VSWAP is the resident portion of VEDIT's "swapper" capability; VEDIT
  3687.       is a programmer's text editor by Greenview Data.
  3688. SeeAlso: AX=D601h,AX=D602h
  3689. --------T-2FD601-----------------------------
  3690. INT 2F U - VEDIT VSWAP - ???
  3691.     AX = D601h
  3692.     BL = subfunction number???
  3693. Return: BL = return code ???
  3694.     ES = resident portion's data??? segment
  3695.     DX = resident portion's code segment
  3696. SeeAlso: AX=D600h"VSWAP"
  3697. --------T-2FD602-----------------------------
  3698. INT 2F U - VEDIT VSWAP - EXEC PROGRAM WITH SWAP
  3699.     AX = D602h
  3700.     other registers set as for INT 21/AX=4B00h
  3701. Return: CF set on error
  3702.         AL = error code
  3703.         82h = failure due to ???
  3704.     CF clear on success
  3705. SeeAlso: AX=D600h"VSWAP",INT 21/AH=4Bh"EXEC"
  3706. --------N-2FD701BX0000-----------------------
  3707. INT 2F - Banyan VINES v4+ - GET BANV INTERRUPT NUMBER
  3708.     AX = D701h
  3709.     BX = 0000h
  3710. Return: AX = 0000h if installed
  3711.         BX = interrupt number (60h to 66h)
  3712.        nonzero not present
  3713. Note:    if AX is nonzero, VINES 3.x or earlier may be installed, thus it is
  3714.       necessary to examine the four bytes preceding the handlers for
  3715.       INT 60 through INT 66 for the string "BANV"
  3716. SeeAlso: AX=D702h,AX=D703h,AX=D704h
  3717. --------N-2FD702-----------------------------
  3718. INT 2F U - Banyan VINES v4+ - PCPRINT interface
  3719.     AX = D702h
  3720.     BX = function
  3721.     ???
  3722. Return: ???
  3723. SeeAlso: AX=D701h,AX=D703h,INT 61/AX=0005h"Banyan"
  3724. --------N-2FD703-----------------------------
  3725. INT 2F U - Banyan VINES v4+ - MAIL interface
  3726.     AX = D703h
  3727.     BX = function
  3728.     ???
  3729. Return: ???
  3730. SeeAlso: AX=D702h,AX=D704h
  3731. --------N-2FD704-----------------------------
  3732. INT 2F U - Banyan VINES v4+ - Streettalk Directory Assistance interface
  3733.     AX = D704h
  3734.     BX = function
  3735.     ???
  3736. Return: ???
  3737. SeeAlso: AX=D703h,INT 61/AX=0007h/BX=0002h"Banyan",INT 61/AX=0007h/BX=0008h
  3738. --------N-2FD800-----------------------------
  3739. INT 2F U - Novell NetWare Lite - CLIENT.EXE - INSTALLATION CHECK
  3740.     AX = D800h
  3741. Return: AL = FFh if installed
  3742.         DX = version number (0100h for v1.0, 0101h for v1.1)
  3743.         BX = data segment of resident copy
  3744.         ES:DI -> private API entry point (see #2722)
  3745.         SI = segment of resident code
  3746. SeeAlso: AX=7A00h,AX=D880h
  3747.  
  3748. (Table 2722)
  3749. Call CLIENT API entry point with:
  3750.     BX = function
  3751.         0000h get ???
  3752.         Return: DX = CLIENT version??? (0101h for v1.1)
  3753.             ES:BX -> ??? data
  3754.         0001h ???
  3755.         0002h ???
  3756.         0003h ???
  3757.         0004h ???
  3758.         0005h ???
  3759.         DL = ???
  3760.         ???
  3761.         Return: ???
  3762.         0006h get module name???
  3763.         ES:DI -> 16-byte buffer
  3764.         Return: CX = ???
  3765.             ES:DI filled with "NWLITE_CLIENT" 00h 00h 00h
  3766.         0007h ???
  3767.         DX:CX = ???
  3768.         ???
  3769.         Return: ???
  3770.         0008h ???
  3771.         0009h ???
  3772.         DL = ???
  3773.         ES:DI -> 16-byte buffer for ???
  3774.         Return: CF clear if successful
  3775.                 AX = 0000h
  3776.                 CX = 0000h
  3777.                 SI,DI destroyed
  3778.             CF set on error
  3779.                 AX = error code 4903h
  3780.         000Ah ???
  3781.         AH = subfunction
  3782.             00h get ???
  3783.             01h clear/set ??? flag
  3784.             AL = new state (00h cleared, 01h set)
  3785.             02h set ???
  3786.             DX = new value of ???
  3787.         Return: DX = old value of ???
  3788.         000Bh ???
  3789.         AX = ???
  3790.         ???
  3791.         Return: ???
  3792.         000Ch ???
  3793.         AX = ???
  3794.         ???
  3795.         Return: ???
  3796.         000Dh ???
  3797.         AX = ???
  3798.         ???
  3799.         Return: ???
  3800.         000Eh get original INT 17
  3801.         Return: CF clear
  3802.             ES:BX -> original INT 17
  3803.         000Fh ???
  3804.         0010h ???
  3805.         AX = ???
  3806.         ???
  3807.         Return: ???
  3808.         0011h get ???
  3809.         Return: CF clear
  3810.             DL = ???
  3811.         0012h get ???
  3812.         AL = index of ???
  3813.         ES:DI -> 10-byte buffer for ???
  3814.         Return: CF clear if successful
  3815.                 ES:DI buffer filled
  3816.                 AX,CX destroyed
  3817.             CF set on error
  3818.                 AX = error code (4907h if AL out of range)
  3819.         0013h get ???
  3820.         Return: CF clear
  3821.             DH = ???
  3822.             DL = ???
  3823.         0014h ???
  3824.         DL = ???
  3825.         ???
  3826.         Return: CF clear if successful
  3827.                 ???
  3828.             CF set on error
  3829.                 AX = error code 8056h
  3830.         0015h ???
  3831.         DX = ???
  3832.         Return: ES:DI -> ???
  3833.         other
  3834.         Return: CF set
  3835.             AX = 0001h (invalid function)
  3836. --------N-2FD856-----------------------------
  3837. INT 2F U - Novell NetWare Lite v1.1 - SERVER - GET ???
  3838.     AX = D856h
  3839. Return: AX = 0001h if supported???
  3840.     BX = ??? (0004h for v1.1)
  3841.     CX = ??? (0F20h for v1.1)
  3842.     DS = segment of resident code
  3843.     ES = data segment of resident copy
  3844. Note:    this function is also supported by Personal NetWare SERVER, bundled
  3845.       with Novell DOS 7
  3846. --------N-2FD880-----------------------------
  3847. INT 2F U - Novell NetWare Lite v1.0+ - SERVER - INSTALLATION CHECK
  3848.     AX = D880h
  3849. Return: AL = FFh if installed
  3850.         DX = version number (0100h for v1.0, 0101h for v1.1)
  3851.         BX = data segment of resident copy
  3852.         CL = current state (00h SERVER is disabled, 01h SERVER is active)
  3853.         ES:DI -> private API entry point (see #2723)
  3854.         SI = ??? (offset of configuration info?)
  3855. Note:    this function is also supported by Personal NetWare SERVER, but DI is
  3856.       not set; instead, ES:SI points at the API entry point
  3857. SeeAlso: AX=7A00h,AX=D800h,INT 2A/AX=D852h
  3858.  
  3859. (Table 2723)
  3860. Call SERVER API entry point with:
  3861.     BX = function
  3862.         0000h ???
  3863.         ???
  3864.         Return: ???
  3865.         Note: closes open files by calling INT 21/AH=3Eh
  3866.         0001h get connection information
  3867.         DX = connection number (0001h-max connections)
  3868.         ES:DI -> 28-byte buffer for connection information
  3869.         Return: CF clear if successful
  3870.                 ES:DI buffer filled
  3871.             CF set on error
  3872.                 AX = FFFFh
  3873.     ---Personal NetWare only---
  3874.         0002h ???
  3875.         0003h ???
  3876.         0004h ???
  3877.         0005h ???
  3878.         0006h ???
  3879.         0007h ???
  3880.         other
  3881.         Return: CF set
  3882.             AX = 0001h (invalid function)
  3883. --------d-2FD8C0-----------------------------
  3884. INT 2F U - Novell NLCACHE,NWCACHE - INSTALLATION CHECK
  3885.     AX = D8C0h
  3886. Return: AL = FFh if installed
  3887.         CL = cache variant (01h NLCACHEC, 02h NLCACHEX, 03h NLCACHEM)
  3888.         DH = major version??? (01h for v1.1)
  3889.         DL = minor version??? (01h for v1.1)
  3890.         ES:DI -> private API entry point (see #2724)
  3891. Program: NLCACHE is a disk cache included with NetWare Lite
  3892. SeeAlso: AX=D800h,AX=D880h
  3893.  
  3894. (Table 2724)
  3895. Call NLCACHE/NWCACHE API entry point with:
  3896.     BX = function
  3897.         0000h ???
  3898.         ???
  3899.         Return: CF clear if successful
  3900.                 AX = 0000h
  3901.                 ???
  3902.             CF set on error
  3903.                 AX = error code
  3904.         0001h (NWCACHE only) ???
  3905.         ES:DI -> buffer for ???
  3906.         Return: ???
  3907.         other
  3908.         Return: CF set
  3909.             AX = 0001h (invalid function)
  3910. --------F-2FDA00-----------------------------
  3911. INT 2F - ZyXEL ZFAX v1.x - INSTALLATION CHECK
  3912.     AX = DA00h
  3913. Return: AH = enabled state (00h = enabled, 01h = disabled)
  3914.     AL = 5Ah installed
  3915. Program: ZFAX is the bundled FAX software which comes with the ZyXEL model
  3916.       fax modems.
  3917. Note:    This function, and the other DAxxh functions, may apply only to version
  3918.       1 of the software; see AX=DB00h for the version 2 installation check
  3919. SeeAlso: AX=CBDCh,AX=DA01h,AX=DA02h,AX=DA03h,AX=DB00h
  3920. --------F-2FDA01-----------------------------
  3921. INT 2F - ZyXEL ZFAX v1.x - UNINSTALL
  3922.     AX = DA01h
  3923. Return: AL = 00h Success
  3924.          01h Failure
  3925. SeeAlso: AX=DA00h,AX=DB01h
  3926. --------F-2FDA02-----------------------------
  3927. INT 2F - ZyXEL ZFAX v.1x - DISABLE
  3928.     AX = DA02h
  3929. Return: AL = 00h
  3930. SeeAlso: AX=DA03h,AX=DB02h
  3931. --------F-2FDA03-----------------------------
  3932. INT 2F - ZyXEL ZFAX v1.x - ENABLE
  3933.     AX = DA03h
  3934. Return: AL = 00h
  3935. SeeAlso: AX=DA02h,AX=DB03h
  3936. --------G-2FDA55-----------------------------
  3937. INT 2F U - TRAP.COM - INSTALLATION CHECK
  3938.     AX = DA55h
  3939.     DL = interrupt number
  3940.     DH = ???
  3941. Return: if installed
  3942.         AH = interrupt number
  3943.         AL = ???
  3944.         ES:BX -> ???
  3945. Program: TRAP is an interrupt call tracer by Patrick Phillipot/Udo Chrosziel
  3946. Note:    a separate copy of TRAP is loaded for each interrupt to be traced; thus
  3947.       the interrupt number is part of the installation check
  3948. --------N-2FDAB2-----------------------------
  3949. INT 2F U - Beame&Whiteside BWSNMP - INSTALLATION CHECK
  3950.     AX = DAB2h
  3951. Return: AX = 00FFh if installed
  3952.         BX:CX -> MIB table
  3953. Program: BWSNMP is part of the BW-NFS package
  3954. SeeAlso: INT 62/AH=00h"ETHDEV"
  3955. --------F-2FDB00-----------------------------
  3956. INT 2F - ZyXEL ZFAX v2+ - INSTALLATION CHECK
  3957.     AX = DB00h
  3958. Return: AL = 5Bh if installed (v2.x)
  3959.         ES:BX -> configuration table???
  3960.     AX = 00DBh if installed (v3)
  3961.         ES:BX -> ZFAX configuration table (see #2725)
  3962. Program: ZFAX is the bundled FAX software which comes with the ZyXEL model
  3963.       Fax modems.
  3964. SeeAlso: AX=CBDCh,AX=DA00h,AX=DB01h,AX=DB02h,AX=DB03h
  3965.  
  3966. Format of ZFAX Configuration Table:
  3967. Offset    Size    Description    (Table 2725)
  3968.  00h    WORD    table version number (0300h for v3.0-v4.01)
  3969.  02h    BYTE    reserved
  3970.  03h 70 BYTEs    ZFAX working path
  3971.  49h 128 BYTEs    path to external editor
  3972.  C9h 128 BYTEs    path to external terminal emulator
  3973. 149h 128 BYTEs    path to Ring Shell
  3974. 1C9h 128 BYTEs    path to DOS Shell
  3975. 249h 128 BYTEs    path to Data Shell
  3976. 2C9h 70 BYTEs    path to Chinese font
  3977. 30Fh    BYTE    printer type (see #2726)
  3978. 310h    BYTE    printer port (00h = LPT1, etc.)
  3979. 311h    BYTE    type of graphics adapter
  3980.         (00h auto-detect, 01h VGA, 02h EGA, 03h CGA, 04h Hercules)
  3981. 312h    BYTE    display type
  3982.         (00h auto-detect, 01h LCD, 02h color, 03h mono)
  3983. 313h    BYTE    scan code for ZFAX hotkey (see #0005)
  3984. 314h    BYTE    shift mask for ZFAX hotkey
  3985. 315h    BYTE    tone/pulse dialing (00h tone, 01h pulse)
  3986. 316h    BYTE    Caller ID (00h disabled, 01h enabled)
  3987. 317h    BYTE    Distinctive Ring (00h disabled, 01h enabled)
  3988. 318h    BYTE    normal ring answer type (see #2727)
  3989. 319h    BYTE    Ring 1 answer type (see #2727)
  3990. 31Ah    BYTE    Ring 2 answer type (see #2727)
  3991. 31Bh    BYTE    Ring 3 answer type (see #2727)
  3992. 31Ch    BYTE    COM port for modem
  3993. 31Dh    BYTE    speaker volume (00h-07h)
  3994. 31Eh    BYTE    modem dial timer, seconds
  3995. 31Fh    WORD    user-defined COM port I/O address
  3996. 321h    BYTE    user-defined COM port IRQ number
  3997. 322h 81 BYTEs    dial prefix string
  3998. 373h 79 BYTEs    dial postfix string
  3999. 3C2h    BYTE    ring count until automatic answer
  4000. 3C3h    BYTE    retry count on busy signal
  4001. 3C4h    BYTE    redial delay in seconds
  4002. 3C5h    WORD    system password
  4003. 3C7h    BYTE    reserved
  4004. 3C8h    BYTE    voice file compression format
  4005.         00h CELP at 9600bps
  4006.         01h two-bit ADPCM at 19200bps
  4007.         02h three-bit ADPCM at 28800bps
  4008. 3C9h    BYTE    voice system: DTMF 0 action (see #2728)
  4009. 3CAh    BYTE    voice system: DTMF 1 action
  4010. 3CBh    BYTE    voice system: DTMF 2 action
  4011. 3CCh    BYTE    voice system: DTMF 3 action
  4012. 3CDh    BYTE    voice system: DTMF 4 action
  4013. 3CEh    BYTE    voice system: DTMF 5 action
  4014. 3CFh    BYTE    voice system: DTMF 6 action
  4015. 3D0h    BYTE    voice system: DTMF 7 action
  4016. 3D1h    BYTE    voice system: DTMF 8 action
  4017. 3D2h    BYTE    voice system: DTMF 9 action (see #2728)
  4018. 3D3h    WORD    reserved
  4019. 3D5h 25 BYTEs    local FAX ID to display on page header
  4020. 3EEh 20 BYTEs    local FAX ID sent to remote FAX
  4021. 402h    BYTE    FAX page size
  4022.         00h A4 (210x297mm)
  4023.         01h B4 (250x353mm)
  4024.         02h A3 (297x420mm)
  4025. 403h    BYTE    FAX resolution
  4026.         00h normal (3.85 pixels/mm)
  4027.         01h high (7.7 pixels/mm)
  4028. 404h    BYTE    FAX coding scheme
  4029.         00h 1-D, modified Huffman coding
  4030.         01h 2-D, modified READ coding
  4031. 405h    BYTE    left margin for text in millimeters
  4032. 406h    BYTE    vertical insertion for text in mm (0-20)
  4033. 407h    BYTE    horizontal insertion in mm (0-20)
  4034. 408h    BYTE    maximum text lines per page
  4035. 409h    BYTE    text type (00h ASCII, 01h WordStar-formatted)
  4036. 40Ah    BYTE    PCX image resize (00h disabled, 01h enabled)
  4037. 40Bh    BYTE    AutoPrint (00h disabled, 01h enabled)
  4038. 40Ch    BYTE    cover page (00h disabled, 01h enabled)
  4039. 40Dh 81 BYTEs    cover page logo filename
  4040. 45Eh 65 BYTEs    cover page sender name
  4041. 49Fh    BYTE    print capture (00h disabled, 01h enabled)
  4042. 4A0h    BYTE    send immediately (00h disabled, 01h enabled)
  4043. 4A1h    BYTE    print capture printer port
  4044. 4A2h    BYTE    print capture timer in seconds
  4045. 4A3h    BYTE    scan code for print capture hotkey (see #0005)
  4046. 4A4h    BYTE    shift mask for print capture hotkey
  4047. 4A5h    BYTE    DataShell type
  4048.         00h internal Zmodem, 01h Data Shell, 02h disable
  4049. 4A6h    BYTE    video I/O type
  4050.         00h auto-detect, 01h use BIOS, 02h direct writes
  4051. 4A7h    BYTE    call transfer digits (0-9)
  4052. 4A8h    WORD    voice recorder maximum time in seconds (0-999)
  4053.  
  4054. (Table 2726)
  4055. Values for ZFAX printer type:
  4056.  00h    EPSON FX (9 pins)
  4057.  01h    EPSON LQ (24 pins)
  4058.  02h    HP Laser Jet II, letter size
  4059.  03h    HP Laser Jet II, legal size
  4060.  04h    HP Laser Jet II, A4 size
  4061.  05h    HP Laser Jet III, letter size
  4062.  06h    HP Laser Jet III, legal size
  4063.  07h    HP Laser Jet III, A4 size
  4064. SeeAlso: #2725
  4065.  
  4066. (Table 2727)
  4067. Values for Ring Answer Type:
  4068.  00h    voice system
  4069.  01h    FAX only
  4070.  02h    Data Shell
  4071.  03h    Ring Shell
  4072.  04h    DOS Shell
  4073.  05h    ignore
  4074. SeeAlso: #2725
  4075.  
  4076. (Table 2728)
  4077. Values for DTMF action:
  4078.  00h    none
  4079.  01h    page operator
  4080.  02h    FaxBack
  4081.  03h    announcement
  4082.  04h    call transfer
  4083.  05h    receive FAX
  4084.  06h    receive data
  4085.  07h    voice mailbox
  4086.  08h    DOS Shell Out
  4087.  09h    Data Shell Out
  4088. SeeAlso: #2725
  4089. --------U-2FDB00-----------------------------
  4090. INT 2F U - WINGO.COM - INSTALLATION CHECK
  4091.     AX = DB00h
  4092. Return: AX = FFFFh if installed
  4093.     CX = 5749h ('WI') if installed
  4094.     DX = 4E47h ('NG') if installed
  4095.         ES = segment of resident code
  4096. Program: WINGO.COM is TSR for starting Windows programs from DOS
  4097.       prompt (together with companion Windows program
  4098.       WINSTART.EXE) written by Douglas Boling, contributing editor of
  4099.       PC Magazine
  4100. Range:    AH=DBh to AH=FFh, selected by scanning for a free multiplex number
  4101. SeeAlso: AX=DB01h"WINGO",AX=DB02h"WINGO",AX=DB03h"WINGO",AX=DB04h"WINGO"
  4102. SeeAlso: AX=DB05h"WINGO",AX=DB06h"WINGO"
  4103. --------F-2FDB01-----------------------------
  4104. INT 2F - ZyXEL ZFAX v2+ - UNINSTALL
  4105.     AX = DB01h
  4106. Return: AX = status
  4107.         0000h successful
  4108.         0001h ZFAX is busy
  4109.         0002h another program resident above ZFAX
  4110. Note:    this function unhooks the vectors taken by the ZFAX TSR if they have
  4111.       not been hooked by other TSRs and releases the TSR's memory
  4112.     ZFAX v2.x crashes the contributor's machine when this function is
  4113.       called
  4114. SeeAlso: AX=DA01h,AX=DB00h"ZFAX",AX=DB02h"ZFAX"
  4115. --------U-2FDB01-----------------------------
  4116. INT 2F U - WINGO.COM - SET CALLBACK FUNCTION POINTER
  4117.     AX = DB01h
  4118.     CX:DX -> new callback function
  4119. Return: AX = 0000h
  4120.     CX:DX -> end of resident code (stack ???)
  4121. Desc:    the callback function is used for WINGO <-> WINSTART communication
  4122. SeeAlso: AX=DB00h"WINGO",AX=DB02h"WINGO",AX=DB03h"WINGO",AX=DB04h"WINGO"
  4123. SeeAlso: AX=DB05h"WINGO",AX=DB06h"WINGO"
  4124. --------F-2FDB02-----------------------------
  4125. INT 2F - ZyXEL ZFAX v2.x - DISABLE
  4126.     AX = DB02h
  4127. Return: AL = 00h
  4128. SeeAlso: AX=DA02h,AX=DB00h"ZFAX",AX=DB01h"ZFAX",AX=DB03h"ZFAX"
  4129. --------U-2FDB02-----------------------------
  4130. INT 2F U - WINGO.COM - RESET CALLBACK FUNCTION POINTER
  4131.     AX = DB02h
  4132. Return: AX = 0000h
  4133. Desc:    the callback function is used for WINGO <-> WINSTART communication
  4134. SeeAlso: AX=DB00h"WINGO",AX=DB01h"WINGO",AX=DB03h"WINGO",AX=DB04h"WINGO"
  4135. SeeAlso: AX=DB05h"WINGO",AX=DB06h"WINGO"
  4136. --------F-2FDB03-----------------------------
  4137. INT 2F - ZyXEL ZFAX v2.x - ENABLE
  4138.     AX = DB03h
  4139. Return: AL = 00h
  4140. SeeAlso: AX=DA03h,AX=DB00h"ZFAX",AX=DB02h"ZFAX"
  4141. --------U-2FDB03-----------------------------
  4142. INT 2F U - WINGO.COM - SET ??? FLAG
  4143.     AX = DB03h
  4144. Return: AX = 0000h
  4145. SeeAlso: AX=DB00h"WINGO",AX=DB04h"WINGO",AX=DB05h"WINGO",AX=DB06h"WINGO"
  4146. --------U-2FDB04-----------------------------
  4147. INT 2F U - WINGO.COM - RESET ??? FLAG
  4148.     AX = DB04h
  4149. Return: AX = 0000h
  4150. SeeAlso: AX=DB00h"WINGO",AX=DB03h"WINGO",AX=DB05h"WINGO",AX=DB06h"WINGO"
  4151. --------U-2FDB05-----------------------------
  4152. INT 2F U - WINGO.COM - GET ??? FLAG
  4153.     AX = DB05h
  4154. Return: AX = 0000h
  4155.     DX = unknown flag - 0 or 1
  4156. Program: WINGO.COM is TSR for starting Windows programs from DOS
  4157.       prompt (together with companion Windows program
  4158.       WINSTART.EXE) written by Douglas Boling, contributing editor of
  4159.       PC Magazine
  4160. SeeAlso: AX=DB00h"WINGO",AX=DB03h"WINGO",AX=DB04h"WINGO"
  4161. --------U-2FDB06-----------------------------
  4162. INT 2F U - WINGO.COM - CALL CALLBACK FUNCTION
  4163.     AX = DB06h
  4164. Return: AX = return value of INT 2F/AX=1685h
  4165. Note:    uses Windows service INT 2F/AX=1685h (SWITCH VMs AND CALLBACK) to
  4166.       call the callback function previously set by AX=DB01h
  4167.     used for WINGO <-> WINSTART communication
  4168. SeeAlso: AX=1685h, AX=DB00h"WINGO",AX=DB01h"WINGO",AX=DB02h"WINGO",
  4169. SeeAlso: AX=DB03h"WINGO",AX=DB04h"WINGO",AX=DB05h"WINGO"
  4170. --------F-2FDB10-----------------------------
  4171. INT 2F - ZyXEL ZFAX v3+ - EXECUTE ZFAX MAIN MENU
  4172.     AX = DB10h
  4173. SeeAlso: AX=DB00h"ZFAX",AX=DB11h"ZFAX"
  4174. --------F-2FDB11-----------------------------
  4175. INT 2F - ZyXEL ZFAX v3+ - SEND FAX
  4176.     AX = DB11h
  4177.     DS:SI -> filename including path (max 128 characters)
  4178.     DS:BX -> remote FAX number
  4179. Return: AX = status (see #2729)
  4180. SeeAlso: AX=DB00h"ZFAX",AX=DB12h,AX=DB13h,AX=DB14h,AX=DB15h,AX=DB20h,AX=DB21h
  4181.  
  4182. (Table 2729)
  4183. Values for ZFAX status:
  4184.  00h    OK
  4185.  01h    invalid DOS function
  4186.  02h    file not found
  4187.  03h    path not found
  4188.  04h    no file handle available
  4189.  05h    access denied by DOS
  4190.  06h    invalid handle
  4191.  07h    disk full
  4192.  10h    printer error
  4193.  11h    no graphics font
  4194.  12h    no ZFAX font
  4195.  20h    DCD dropped while sending
  4196.  21h    not ZyXEL modem
  4197.  22h    busy
  4198.  23h    no response from COM port
  4199.  24h    no carrier
  4200.  25h    no dial tone
  4201.  26h    no answer
  4202.  27h    no response
  4203.  28h    failed to send FAX
  4204.  30h    user aborted
  4205.  40h    critical error on disk
  4206.  50h    parameter error
  4207. --------F-2FDB12-----------------------------
  4208. INT 2F - ZyXEL ZFAX v3+ - PRINT FAX
  4209.     AX = DB12h
  4210.     DS:SI -> filename, including path (max 128 characters)
  4211. Return: AX = status (see #2729)
  4212. SeeAlso: AX=DB11h,AX=DB13h,AX=DB14h
  4213. --------F-2FDB13-----------------------------
  4214. INT 2F - ZyXEL ZFAX v3+ - CONVERT FAX
  4215.     AX = DB13h
  4216.     DS:SI -> source filename, including path (max 128 characters)
  4217.     DS:BX -> destination filename, including path (max 80 characters)
  4218.     CX = destination file format
  4219.         00h FAX, 01h PCX, 02h TIFF, 03h PRN
  4220. Return: AX = status (see #2729)
  4221. SeeAlso: AX=DB11h,AX=DB12h,AX=DB14h,AX=DB22h
  4222. --------F-2FDB14-----------------------------
  4223. INT 2F - ZyXEL ZFAX v3+ - VIEW FAX
  4224.     AX = DB14h
  4225.     DS:SI -> source filename, including path (max 128 characters)
  4226. Return: AX = status (see #2729)
  4227. SeeAlso: AX=DB11h,AX=DB12h,AX=DB14h
  4228. --------F-2FDB15-----------------------------
  4229. INT 2F - ZyXEL ZFAX v4.01 - SEND FAX WITH LOGO AND SIGNATURE
  4230.     AX = DB15h
  4231.     DS:SI -> source filename, including path (max 128 characters)
  4232.     DS:BX -> remote FAX number
  4233.     DS:CX -> Logo filename
  4234.     DS:DX -> Signature filename
  4235. Return: AX = status (see #2729)
  4236. SeeAlso: AX=DB00h"ZFAX",AX=DB11h
  4237. --------F-2FDB16-----------------------------
  4238. INT 2F - ZyXEL ZFAX v4.01 - QUOTE PREVIOUS STATUS
  4239.     AX = DB16h
  4240. Return: DX:AX -> previous receive state transaction log (see #2730)
  4241.     BX = type (00h incoming FAX, 01h incoming data, 02h incoming voice)
  4242. SeeAlso: AX=DB00h"ZFAX",AX=DB11h,AX=DB17h
  4243.  
  4244. Format of ZFAX transaction log receive state:
  4245. Offset    Size    Description    (Table 2730)
  4246.  00h    WORD    year
  4247.  02h    WORD    date
  4248.  04h    WORD    time
  4249.  06h    WORD    extension number
  4250.  08h    WORD    type: 00h incoming FAX, 01h outgoing FAX, 02h voice message
  4251.  0Ah    WORD    status: 00h normal, 01h remote delete
  4252.  0Ch 125 BYTEs    filename
  4253.  89h 24 BYTEs    caller ID
  4254.  A1h 20 BYTEs    FAX number
  4255.  B5h 20 BYTEs    remote FAX ID
  4256.  C9h    WORD    error code
  4257.  CBh    WORD    connection direction (00h transmit, 01h receive)
  4258.  CDh    BYTE    connection time minutes
  4259.  CEh    BYTE    connection time seconds
  4260.  CFh    BYTE    ???
  4261.  D0h    WORD    connection speed (24, 48, 72, 96, 12, 144)
  4262.  D2h    WORD    connection page size (A4, B4, A3)
  4263.  D4h    WORD    connection coding scheme (1-DN, 1-DH, 2-DN, 2-DH)
  4264.  D6h    WORD    page count
  4265. --------F-2FDB17-----------------------------
  4266. INT 2F - ZyXEL ZFAX v4.01 - BEGIN RECEIVING INCOMING CALL
  4267.     AX = DB17h
  4268. Return: AX = status (0000h successful, 0001h unable to start at this time)
  4269. SeeAlso: AX=DB00h"ZFAX"
  4270. --------F-2FDB18-----------------------------
  4271. INT 2F - ZyXEL ZFAX v4.01 - SCHEDULE CALL
  4272.     AX = DB18h
  4273.     DS:SI -> schedule data (see #2730)
  4274. Return: AX = status (see #2729)
  4275. SeeAlso: AX=DB00h"ZFAX"
  4276. --------F-2FDB20-----------------------------
  4277. INT 2F - ZyXEL ZFAX v3+ - POLL FAX
  4278.     AX = DB20h
  4279.     DS:SI -> remote FAX number
  4280. Return: AX = status (see #2729)
  4281. SeeAlso: AX=DB11h,AX=DB21h
  4282. --------F-2FDB21-----------------------------
  4283. INT 2F - ZyXEL ZFAX v3+ - SEND VOICE
  4284.     AX = DB21h
  4285.     DS:SI -> filename including path (max 128 characters)
  4286.     DS:BX -> remote phone number
  4287. Return: AX = status (see #2729)
  4288. SeeAlso: AX=DB11h,AX=DB20h,AX=DB22h,AX=DB23h,AX=DB24h
  4289. --------F-2FDB22-----------------------------
  4290. INT 2F - ZyXEL ZFAX v3+ - CONVERT VOICE FILE
  4291.     AX = DB22h
  4292.     DS:SI -> source filename, including path (max 128 characters)
  4293.     DS:BX -> destination filename, including path (max 80 characters)
  4294.     CX = destination format
  4295.         00h two-bit ADPCM, 01h three-bit ADPCM, 02h VOC
  4296. Return: AX = status (see #2729)
  4297. SeeAlso: AX=DB13h,AX=DB20h,AX=DB21h,AX=DB23h
  4298. --------F-2FDB23-----------------------------
  4299. INT 2F - ZyXEL ZFAX v3+ - RECORD VOICE FILE
  4300.     AX = DB23h
  4301.     DS:SI -> destination filename, including path (max 128 characters)
  4302.     CX = recording channel (0 = telephone line, 1 = microphone/speaker)
  4303.     DX = voice file format
  4304.         00h CELP, 01h two-bit ADPCM, 02h three-bit ADPCM
  4305. Return: AX = status (see #2729)
  4306. SeeAlso: AX=DB21h,AX=DB22h,AX=DB24h
  4307. --------F-2FDB24-----------------------------
  4308. INT 2F - ZyXEL ZFAX v3+ - PLAY VOICE FILE
  4309.     AX = DB24h
  4310.     DS:SI -> name of voice file, including path (max 128 characters)
  4311.     CX = playback channel (0 = telephone line, 1 = microphone/speaker)
  4312. Return: AX = status (see #2729)
  4313. SeeAlso: AX=DB21h,AX=DB22h,AX=DB24h
  4314. --------F-2FDB25-----------------------------
  4315. INT 2F - ZyXEL ZFAX v3+ - ANSWER MODEM WITH VOICE SYSTEM
  4316.     AX = DB25h
  4317. Return: AX = status (see #2729)
  4318. SeeAlso: AX=DB21h,AX=DB22h,AX=DB26h,AX=DB27h,AX=DB28h
  4319. --------F-2FDB26-----------------------------
  4320. INT 2F - ZyXEL ZFAX v3+ - DIAL PHONE
  4321.     AX = DB26h
  4322.     DS:SI -> remote phone number
  4323. Return: AX = status (see #2729)
  4324. SeeAlso: AX=DB25h
  4325. --------F-2FDB27-----------------------------
  4326. INT 2F - ZyXEL ZFAX v3+ - RECEIVE FAX - ANSWER MODEM AND SET TO FAX MODE
  4327.     AX = DB27h
  4328. Return: AX = status (see #2729)
  4329. SeeAlso: AX=DB25h,AX=DB28h
  4330. --------F-2FDB28-----------------------------
  4331. INT 2F - ZyXEL ZFAX v3+ - RECEIVE FAX DATA - ANSWER MODEM IN MULTI-AUDIO MODE
  4332.     AX = DB28h
  4333. Return: AX = status (see #2729)
  4334. SeeAlso: AX=DB25h,AX=DB27h,AX=DB41h
  4335. --------F-2FDB40-----------------------------
  4336. INT 2F - ZyXEL ZFAX v3+ - INTERNAL TERMINAL
  4337.     AX = DB40h
  4338. Return: AX = status (see #2729)
  4339. SeeAlso: AX=DB00h
  4340. --------F-2FDB41-----------------------------
  4341. INT 2F - ZyXEL ZFAX v3+ - SEND DATA - DIAL NUMBER AND UPLOAD FILE WITH ZMODEM
  4342.     AX = DB41h
  4343.     DS:SI -> source file name, including path (max 128 characters)
  4344.     DS:BX -> remote data number
  4345. Return: AX = status (see #2729)
  4346. SeeAlso: AX=DB00h,AX=DB28h
  4347. --------K-2FDC00-----------------------------
  4348. INT 2F - GOLD.COM - INSTALLATION CHECK
  4349.     AX = DC00h
  4350. Return: AL = state
  4351.         00h not installed
  4352.         FFh installed
  4353. Program: GOLD is a TSR by Bob Eager which makes the NumLock key return the
  4354.       code for F1; the purpose is to improve Kermit's VTxxx emulation
  4355. --------K-2FDC01-----------------------------
  4356. INT 2F - GOLD.COM - GET STATE
  4357.     AX = DC01h
  4358. Return: AL = status
  4359.         00h off
  4360.         01h on
  4361. SeeAlso: AX=DC00h,AX=DC02h
  4362. --------K-2FDC02-----------------------------
  4363. INT 2F - GOLD.COM - SET STATE
  4364.     AX = DC02h
  4365.     DL = new state
  4366.         00h off
  4367.         01h on
  4368. Return: AL = 00h (OK)
  4369. SeeAlso: AX=DC01h
  4370. --------t-2FDD-------------------------------
  4371. INT 2F - CappaCom programs - API
  4372.     AH = DDh
  4373.     AL = 00h general installation check
  4374.         Return: AL = FFh if any CappaCom programs are resident
  4375.     AL = FEh get info
  4376.         Return: ES:BX -> TSR info list (see #2731)
  4377.     AL = program identifier
  4378.         BH = function
  4379.         FDh get version
  4380.             Return: BX = version
  4381.         FFh installation check
  4382.             Return: AL = FFh if installed
  4383.                 BX = version
  4384.                 ES = segment of resident code
  4385.         others vary by program
  4386. Return: AL = status
  4387.         bit 7 set on error
  4388.         AL = 81h unknown function
  4389. Note:    CappaCom was originally SoftCom but changed its name due to a trademark
  4390.       conflict
  4391. Index:    installation check;SoftCom programs
  4392. Index:    installation check;CappaCom programs
  4393.  
  4394. Format of CappaCom TSR info list:
  4395. Offset    Size    Description    (Table 2731)
  4396.  00h  9 BYTEs    blank-padded ASCIZ program name
  4397.  09h    BYTE    program ID
  4398.  0Ah    WORD    program's PSP segment
  4399.  0Ch    WORD    program version (major in high byte)
  4400.  0Eh    DWORD    pointer to next item in info list or 0000h:0000h
  4401.  12h    BYTE    number of interrupts hooked
  4402.  13h  5 BYTEs    interrupt numbers hooked by program
  4403.  18h  8 BYTEs    reserved
  4404. ----------2FDD-------------------------------
  4405. INT 2F - MIXFIX.EXE - API
  4406.     AH = DDh
  4407.     AL = function
  4408.         00h installation check
  4409.         Return: AX = 00DDh if installed
  4410.                 BX = version (BH = major, BL = minor)
  4411.         41h/61h get From: address
  4412.         Return: AX = 0001h
  4413.             ES:BX -> ASCIZ 4d address of mail sender ("1:2/3.4")
  4414.         49h/69h get To: address
  4415.         Return: AX = 0001h
  4416.             ES:BX -> ASCIZ 4d address of recipient ("1:2/3.4")
  4417.         4Ah/6Ah get subject of mail
  4418.         Return: AX = 0001h
  4419.             ES:BX -> ASCIZ subject of handled mail
  4420.         4Dh/6Dh get mail name
  4421.         Return: AX = 0001h
  4422.             ES:BX -> ASCIZ full name of current mail file
  4423.         4Eh/6Eh get From: field
  4424.         Return: AX = 0001h
  4425.             ES:BX -> ASCIZ From: field of mail (mail sender's name)
  4426. Program: MIXFIX by "KIV without Co" is a FidoNet mail robot which may execute
  4427.       other programs for mail handling.  The called programs may use the
  4428.       services described here to retrieve information about the mail being
  4429.       handled.
  4430. Index: installation check;MIXFIX.EXE
  4431. --------d-2FDD--BX7844-----------------------
  4432. INT 2F - xDISK v3.32+ - INSTALLATION CHECK
  4433.     AH = DDh
  4434.     BX = 7844h ('xD')
  4435.     CX = 4953h ('IS')
  4436.     DX = 4B3Fh ('K?')
  4437.     AL = desired drive (01h-1Ah) or 00h to check for xDISK on any drive
  4438.     ES:DI -> 25-byte data buffer (see #2732)
  4439. Return: AX = DDFFh if installed (on specified drive if AL nonzero on entry)
  4440.        BX = 87BBh
  4441.        DX = B4C0h
  4442.        ES:DI buffer filled
  4443.     CX,CF destroyed
  4444. SeeAlso: INT 21/AX=4404h"xDISK",INT 21/AX=4405h"xDISK"
  4445.  
  4446. Format of xDISK data buffer:
  4447. Offset    Size    Description    (Table 2732)
  4448.  00h    DWORD    pointer to ASCIZ driver signature "xDISK unit: X"
  4449.  04h    BYTE    flag: 01h if disk linked to DOS, 00h if unlinked
  4450.  05h    BYTE    flag: 01h if write protected, 00h if not
  4451.  06h    BYTE    flag: 01h if root directory full, 00h if not
  4452.  07h    BYTE    flag: 01h if free space uncompacted, 00h if compacted
  4453.  08h    BYTE    resizing state: 00h not resizable, 01h resized, 80h resizable
  4454.  09h    BYTE    flag: 01h inelastic resizable disk, 00h elastic
  4455.  0Ah  2 BYTEs    reserved
  4456.  0Ch    BYTE    flag: 01h collapsed disk, 00h not collapsed
  4457.  0Dh    BYTE    flag: 01h using all EMS, 00h some EMS free
  4458.  0Eh    BYTE    flag: 01h password enabled, 00h disabled
  4459.  0Fh    BYTE    flag: 01h password audio feedback, 00h no feedback
  4460.  10h    BYTE    flag: 01h password video feedback, 00h no feedback
  4461.  11h    BYTE    flag: 01h confirm changes, 00h no confirmation
  4462.  12h    BYTE    flag: 01h terse display, 00h verbose display
  4463.  13h    BYTE    flag: 01h click speaker on disk access, 00h no click
  4464.  14h    BYTE    flag: 01h flash icon on disk access, 00h no icon flash
  4465.  15h    BYTE    FAT entry size: 00h 12-bit, FFh 16-bit
  4466.  16h    WORD    count of open files in RAM disk
  4467.  18h    BYTE    unused
  4468. --------N-2FDE00BL00-------------------------
  4469. INT 2F U - Novell Netware - RPRINTER, NPRINTER - INSTALLATION CHECK
  4470.     AX = DE00h
  4471.     BL = 00h
  4472. Return: AL = FFh If Rprinter/Nprinter Installed
  4473.     BX -> Program Segment Prefix N/Rprinter.exe
  4474. --------Q-2FDE00BX4456-----------------------
  4475. INT 2F - DESQview v2.26+ External Device Interface - INSTALLATION CHECK
  4476.     AX = DE00h
  4477.     BX = 4456h ("DV")
  4478.     CX = 5844h ("XD")
  4479.     DX = 4931h ("I1")
  4480. Return: AL = FFh if installed (even if other registers do not match)
  4481.     if BX,CX, and DX were as specified on entry,
  4482.         BX = 4845h ("HE")
  4483.         CX = 5245h ("RE")
  4484.         DX = 4456h ("DV")
  4485. Range:    AH=C0h to AH=FFh, selected by scanning AH=DEh-FFh, then AH=C0h-DDh
  4486. Note:    the XDI handler should not issue any DOS or BIOS calls, nor should it
  4487.       issue DESQview API calls other than those allowed from hardware ints
  4488. SeeAlso: AX=DE02h,INT 15/AX=5400h
  4489. --------Q-2FDE01-----------------------------
  4490. INT 2F - DESQview v2.26+ External Device Interface - DRIVER CUSTOM SUBFUNCTION
  4491.     AX = DE01h
  4492.     BX = driver ID
  4493.     other registers as needed by driver
  4494. Notes:    XDI drivers should pass this call through to previous handler if ID
  4495.       does not match
  4496.     DESQview never calls this function
  4497. --------Q-2FDE01BX4450-----------------------
  4498. INT 2F U - Quarterdeck QDPMI.SYS v1.0 - INSTALLATION CHECK
  4499.     AX = DE01h
  4500.     BX = 4450h ("DP")
  4501.     CX = 4D49h ("MI")
  4502.     DX = 3039h ("09")
  4503. Return: AL = FFh if installed
  4504.         BX = 4D42h ("MB")
  4505.         CX = 4921h ("I!")
  4506.         DX = 8F4Fh
  4507.         ES:DI -> filename of DPMI host overlay
  4508. Note:    the installation check consists of testing for the existence of the
  4509.       character device QDPMI$$$
  4510. SeeAlso: INT 2F/AX=1687h,INT 31/AX=0000h
  4511. Index:    installation check;QDPMI
  4512. --------U-2FDE01BX5242-----------------------
  4513. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, Ralf Brown's XDI drivers
  4514.     AX = DE01h
  4515.     BX = 5242h ("RB")
  4516.     CX:DX = program identifier
  4517.         656F7000h ("eop",0) for DVeop
  4518. Return: AX = 5242h ("RB") if installed
  4519.         ES:BX -> data or entry point (see #2733)
  4520.         CX = version number (CH = major, CL = minor)
  4521.  
  4522. (Table 2733)
  4523. Call DVeop entry point with:
  4524.     ES:DI -> callback address or 0000h:0000h to remove callback
  4525. Return: AX = status
  4526.         0000h failed (callback table full or attempted to remove non-
  4527.           existent callback)
  4528.         0001h successful
  4529.         ES:DI -> chaining address
  4530.     BX,CX,DX destroyed
  4531. Notes:    the callback function is called with a simulated interrupt when the
  4532.       DESQview window containing it is closed; it should perform all
  4533.       necessary cleanup and then perform a FAR jump to the chaining address
  4534.       or an IRET if the chaining address is 0000h:0000h
  4535.     if the program wishes to remove itself before the window is closed, it
  4536.       should call the DVeop entry point with the previously returned
  4537.       chaining address and ignore the returned chaining address.
  4538. --------U-2FDE01BX7474-----------------------
  4539. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVTXDI.COM
  4540.     AX = DE01h
  4541.     BX = 7474h
  4542.     CL = function
  4543.         00h installation check
  4544.         Return: AL = FFh
  4545.         01h get process handle
  4546.         DX = keys on Open Window menu (DL = first, DH = second)
  4547.         Return: AX = process handle or 0000h if not running
  4548.         02h (v1.3+) set TMAN handle
  4549.         DX = TMAN process handle
  4550.         03h (v1.3+) set open keys to ignore on next CL=01h call
  4551.         DX = keys on Open Window menu (DL = first, DH = second)
  4552. Return: BX = 4F4Bh ("OK")
  4553.     DL destroyed
  4554. Note:    DVTXDI is distributed as part of the shareware products DVTree (DOS
  4555.      shell/DESQview process manager) and DVTMAN by Mike Weaver
  4556. Index:    installation check;DVTXDI
  4557. --------U-2FDE01BX7575-----------------------
  4558. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVSIXDI.COM
  4559.     AX = DE01h
  4560.     BX = 7575h
  4561.     CX = function
  4562.         0000h installation check
  4563.         Return: AX = 00FFh if installed
  4564.         0001h turn on notification (currently unused)
  4565.         Return: AX = 0001h
  4566.         0002h turn off notification (currently unused)
  4567.         Return: AX = 0001h
  4568.         0003h get process information
  4569.         Return: AX = status
  4570.                 0000h failed
  4571.                 0001h successful
  4572.                 BX = last instantaneous time slice
  4573.                     in 1/100s (v1.10)
  4574.                     in 1/18s (v1.11+)
  4575.                 CX = number of processes
  4576.                 DX = number of "(starting)" records (v2.00+)
  4577.                 SI = number of records in process info array
  4578.                       (v2.00+) (always 15 for v1.x)
  4579.                 ES:DI -> process info array (see #2734,#2735)
  4580.         0004h get version
  4581.         Return: AH = major version
  4582.             AL = minor version
  4583.         0005h (v1.10+) get time since DESQview started
  4584.         Return: DX:AX = 1/100s since DV start (v1.10)
  4585.             DX:AX = 1/18s since DV start (v1.11+)
  4586.         0006h (v1.10+) get number of task switches
  4587.         Return: DX:AX = total task switches
  4588.             CX = task switches in last instantaneous interval
  4589. Notes:    DVSIXDI is part of the DVSI (DESQview System Information) package by
  4590.       Daniel J. Bodoh
  4591.     for v1.00, function 0003h allocates common memory, which the caller
  4592.       must deallocate after reading the process information; only the
  4593.       currently used records are placed in the buffer
  4594.     for v1.10+, function 0003h merely returns a pointer to the internal
  4595.       array of process information; the caller should make a copy of the
  4596.       array while inside a critical section (see INT 15/AX=101Bh).    Only
  4597.       those records with bit 7 of the first byte set are valid.
  4598. Index:    installation check;DVSIXDI
  4599.  
  4600. Format of DVSIXDI v1.00 information for one process:
  4601. Offset    Size    Description    (Table 2734)
  4602.  00h    BYTE    flags
  4603.         bit 7: process slot is valid
  4604.  01h    WORD    offset into DESQVIEW.DVO of program's record if started from
  4605.           Open Windows menu, else undefined
  4606.  03h    WORD    Switch Windows window number
  4607.  05h    WORD    segment of process handle
  4608.  07h    WORD    number of tasks owned by process
  4609.  09h    WORD    mapping context of process (see #0335 at INT 15/AX=1016h)
  4610.  0Bh    DWORD    hook for other programs
  4611.  
  4612. Format of DVSIXDI v1.10-v2.00 information for one process:
  4613. Offset    Size    Description    (Table 2735)
  4614.  00h    BYTE    process flags (see #2736)
  4615.  01h    WORD    Open Window keys
  4616.  03h    WORD    Switch Windows number
  4617.  05h    WORD    segment of process handle
  4618.  07h    WORD    number of tasks for process
  4619.  09h    WORD    process mapping context
  4620.  0Bh    DWORD    time process started (relative to start of DESQview)
  4621.  0Fh    DWORD    time process last got CPU (relative to start of DESQview)
  4622.  13h    DWORD    time process last gave up CPU (relative to start of DESQview)
  4623.  17h    DWORD    total CPU time since process started
  4624.  1Bh    DWORD    CPU time at start of current instantaneous interval
  4625.  1Fh    DWORD    CPU time in current instantaneous interval
  4626.  23h    DWORD    hook for other programs
  4627. Note:    all times are in 1/100s for v1.10, in 1/18s for v1.11+
  4628.  
  4629. Bitfields for DVSIXDI process flags:
  4630. Bit(s)    Description    (Table 2736)
  4631.  7    valid record
  4632.  6    (v2.00+) record is allocated; if bit 7 clear, process is "(starting)"
  4633.       and only offsets 01h and 09h are valid
  4634.  5    (v2.00+) this app currently owns the CPU
  4635.  4    reserved (0)
  4636.  3    DESQview system task
  4637.  2    reserved (0)
  4638.  1    task has keyboard (currently unused)
  4639.  0    task swapped out (currently unused)
  4640. --------Q-2FDE01BXFFFE-----------------------
  4641. INT 2F U - DESQview v2.26+ XDI - DVXMS.DVR - ???
  4642.     AX = DE01h
  4643.     BX = FFFEh
  4644.     CX = 4D47h ("MG")
  4645.     DX = 0052h (0,"R")
  4646. Return: AL = FFh
  4647.     DX = 584Dh
  4648. --------Q-2FDE02-----------------------------
  4649. INT 2F C - DESQview v2.26+ External Dev Interface - DV INITIALIZATION COMPLETE
  4650.     AX = DE02h
  4651.     BX = mapping context of DESQview
  4652.     DX = handle of DESQview system task
  4653. Note:    driver should pass this call to previous handler after doing its work
  4654. SeeAlso: AX=DE03h,AX=DE0Fh,INT 15/AX=5400h
  4655. --------Q-2FDE03-----------------------------
  4656. INT 2F C - DESQview v2.26+ External Dev Interface - DV TERMINATION
  4657.     AX = DE03h
  4658.     BX = mapping context of DESQview
  4659.     DX = handle of DESQview system task
  4660. Notes:    driver should pass this call to previous handler before doing its work
  4661.     DESQview makes this call when it is exiting, but before unhooking any
  4662.       interrupt vectors
  4663. SeeAlso: AX=DE02h,AX=DE0Fh,INT 15/AX=5407h
  4664. --------Q-2FDE04-----------------------------
  4665. INT 2F C - DESQview v2.26+ External Dev Interface - ADD PROCESS
  4666.     AX = DE04h
  4667.     BX = mapping context of new process (see #0335 at INT 15/AX=1016h)
  4668.     DX = handle of process
  4669. Return: nothing
  4670. Notes:    XMS XDI handler (installed by default) allocates a 22-byte record
  4671.       (see #2737) from "common" memory to control access to XMS memory
  4672.     all DOS, BIOS, and DV API calls are valid in handler
  4673.     driver should pass this call to previous handler after processing it
  4674. SeeAlso: AX=DE05h,AX=DE06h,INT 15/AX=5401h
  4675.  
  4676. Format of XMS XDI structure:
  4677. Offset    Size    Description    (Table 2737)
  4678.  00h    DWORD    pointer to 10-byte record???
  4679.  04h    DWORD    pointer to next XMS XDI structure
  4680.  08h    WORD    mapping context
  4681.  0Ah    BYTE    ???
  4682.  0Bh  5 BYTEs    XMS entry point to return for INT 2F/AX=4310h"XMS"
  4683.         (FAR jump to next field)
  4684.  10h  6 BYTEs    FAR handler for XMS driver entry point
  4685.         (consists of a FAR CALL followed by RETF)
  4686. --------Q-2FDE05-----------------------------
  4687. INT 2F C - DESQview v2.26+ External Dev Interface - REMOVE PROCESS
  4688.     AX = DE05h
  4689.     BX = mapping context of process (see #0335 at INT 15/AX=1016h)
  4690.     DX = handle of last task in process
  4691. Return: nothing
  4692. Notes:    XMS XDI handler releases the structure allocated by AX=DE04h
  4693.     driver should pass this call to previous handler before processing it
  4694.     all DOS, BIOS, and DV API calls except those generating a task switch
  4695.       are valid in handler
  4696. SeeAlso: AX=DE04h,AX=DE07h,INT 15/AX=5402h
  4697. --------Q-2FDE06-----------------------------
  4698. INT 2F C - DESQview v2.26+ External Dev Interface - CREATE TASK
  4699.     AX = DE06h
  4700.     BX = mapping context of process containing task
  4701.     DX = handle of new task
  4702. Notes:    driver should pass this call to previous handler after processing it
  4703.     all DOS, BIOS, and DV API calls are valid in handler
  4704. --------Q-2FDE07-----------------------------
  4705. INT 2F C - DESQview v2.26+ External Dev Interface - TERMINATE TASK
  4706.     AX = DE07h
  4707.     BX = mapping context of process containing task
  4708.     DX = handle of task
  4709. Notes:    driver should pass this call to previous handler before processing it
  4710.     all DOS, BIOS, and DV API calls except those generating a task switch
  4711.       are valid in handler
  4712. SeeAlso: AX=DE04h,AX=DE06h,AX=DE10h
  4713. --------Q-2FDE08-----------------------------
  4714. INT 2F C - DESQview v2.26+ External Dev Interface - SAVE STATE
  4715.     AX = DE08h
  4716.     BX = mapping context of task being switched from
  4717.           (see #0335 at INT 15/AX=1016h)
  4718.     DX = handle of task being switched from
  4719. Notes:    invoked prior to task swap, interrupts, etc
  4720.     driver should pass this call to previous handler after processing it
  4721. SeeAlso: AX=DE09h,INT 15/AX=5403h,INT 15/AX=DE27h
  4722. --------Q-2FDE09-----------------------------
  4723. INT 2F C - DESQview v2.26+ External Dev Interface - RESTORE STATE
  4724.     AX = DE09h
  4725.     BX = mapping context of task being switched to
  4726.           (see #0335 at INT 15/AX=1016h)
  4727.     DX = handle of task being switched to
  4728. Notes:    state is restored except for interrupts
  4729.     driver should pass this call to previous handler before processing it
  4730. SeeAlso: AX=DE08h,INT 15/AX=5404h,INT 15/AX=DE27h
  4731. --------Q-2FDE0A-----------------------------
  4732. INT 2F C - DESQview v2.26+ External Dev Interface - CHANGE KEYBOARD FOCUS
  4733.     AX = DE0Ah
  4734.     BX = mapping context of task receiving focus
  4735.     DX = handle of running task
  4736. Notes:    driver should pass this call to previous handler before processing it
  4737.     this call often occurs inside a keyboard interrupt
  4738.     DV 2.42 does not provide this call to XDI handlers running inside a
  4739.       window; instead, it directly calls the INT 2F handler which was
  4740.       active at the time DV started
  4741. SeeAlso: INT 15/AX=DE26h,INT 15/AX=DE2Fh
  4742. --------Q-2FDE0B-----------------------------
  4743. INT 2F C - DESQview v2.26+ External Dev Interface - DVP PROCESSING COMPLETE
  4744.     AX = DE0Bh
  4745.     BX = mapping context of DESQview system task
  4746.     CX = number of system memory paragraphs required for the use of all
  4747.           XDI drivers (DV will add this to system memory in DVP buffer)
  4748.     DX = handle of DESQview system task
  4749.     SI = mapping context of new process if it starts
  4750.     ES:DI -> DVP buffer
  4751. Return: CX incremented as needed
  4752. Notes:    once DV invokes this function, the DVP buffer contents may be changed
  4753.     driver should pass this call to previous handler before processing it
  4754. --------Q-2FDE0C-----------------------------
  4755. INT 2F C - DESQview v2.26+ External Dev Interface - SWAP OUT PROCESS
  4756.     AX = DE0Ch
  4757.     BX = mapping context of task being swapped out
  4758.           (see #0335 at INT 15/AX=1016h)
  4759.     DX = handle of DESQview system task
  4760. Note:    driver should pass this call to previous handler after processing it
  4761. --------Q-2FDE0D-----------------------------
  4762. INT 2F C - DESQview v2.26+ External Dev Interface - SWAP IN PROCESS
  4763.     AX = DE0Dh
  4764.     BX = mapping context of process just swapped in
  4765.           (see #0335 at INT 15/AX=1016h)
  4766.     DX = handle of DESQview system task
  4767. Note:    driver should pass this call to previous handler before processing it
  4768. --------Q-2FDE0E-----------------------------
  4769. INT 2F C - DESQview v2.26+ External Dev Interface - DVP START FAILED
  4770.     AX = DE0Eh
  4771.     BX = mapping context of DESQview system task
  4772.     DX = handle of DESQview system task
  4773.     SI = mapping context of failed process (same as for call to AX=DE0Bh)
  4774. Note:    driver should pass this call to previous handler after processing it
  4775. --------Q-2FDE0F-----------------------------
  4776. INT 2F C - DESQview v2.50+ External Dev Interface - INITIALIZE DV
  4777.     AX = DE0Fh
  4778. Note:    DESQview 2.50+ calls this function just before it completes its
  4779.       initialization.  At the time of the call, DESQview has not yet
  4780.       changed any interrupt vectors
  4781. SeeAlso: AX=DE02h
  4782. --------Q-2FDE10-----------------------------
  4783. INT 2F C - DESQview v2.50+ External Dev Interface - FREE TASK
  4784.     AX = DE10h
  4785.     BX = mapping context of process (see #0335 at INT 15/AX=1016h)
  4786.     DX = task handle of process
  4787. Note:    DESQview 2.50+ calls this function before it frees the task; it is
  4788.       similar to AX=DE07h but allows the XDI handler to make calls which
  4789.       cause context switches
  4790. SeeAlso: AX=DE06h,AX=DE07h
  4791. --------c-2FDF00-----------------------------
  4792. INT 2F - HyperWare programs - INSTALLATION CHECK
  4793.     AX = DF00h
  4794.     BX = product code (see #2738)
  4795.     CX = 0000h
  4796.     DX = 0000h
  4797. Return: AL = status
  4798.         00h not installed
  4799.         FFh multiplex number in use
  4800.         CX = 5948h ('YH') if selected product installed
  4801.         ---HyperDisk---
  4802.         BX = code segment of resident portion
  4803.         DX = HyperDisk local data version
  4804. Program: HyperDisk is a shareware disk cache by HyperWare (Roger Cross)
  4805. Range:    AH=C0h to AH=FFh, selected by scanning AH=DFh, then AH=C0h-FFh
  4806. SeeAlso: INT 13/AX=8EEDh
  4807. Index:    installation check;HyperDisk|installation check;HyperStb
  4808. Index:    installation check;HyperKey|installation check;HyperScreen
  4809. Index:    HyperDisk;installation check|HyperStb;installation check
  4810. Index:    HyperKey;installation check|HyperScreen;installation check
  4811.  
  4812. (Table 2738)
  4813. Values for HyperWare product code:
  4814.  4248h    ('BH') HyperStb
  4815.  4448h    ('DH') HyperDisk v4.20+
  4816.  4B48h    ('KH') HyperKey
  4817.  5348h    ('SH') HyperScreen
  4818. --------Q-2FDF00BX5445-----------------------
  4819. INT 2F U - Quarterdeck TELTSR.COM - INSTALLATION CHECK
  4820.     AX = DF00h
  4821.     BX = 5445h ('TE')
  4822.     CX = 4C54h ('LT')
  4823.     DX = 5352h ('SR')
  4824. Return: BX = 5454h ('TT') if installed
  4825.     CX = 494Eh ('IN') if installed
  4826.     DX = 5454h ('ST') if installed
  4827. Program: TELTSR is a Telnet TSR included with Quarterdeck's DESQview/X v2.00
  4828.       which provides an INT 14h interface to the network
  4829. Range:    AH=DEh to AH=FFh and AH=C0h to AH=DDh, selected by scanning
  4830. SeeAlso: AX=DF01h"TELTSR",AX=DF02h"TELTSR",INT 14/AH=56h
  4831. --------N-2FDF01BX0000-----------------------
  4832. INT 2F U - MSG.COM - INSTALLATION CHECK
  4833.     AX = DF01h
  4834.     BX = 0000h
  4835. Return: AX = FDFFh if installed
  4836.        BX = segment of resident code
  4837. Program: MSG.COM is a TSR for intercepting incoming Novell broadcast
  4838.       messages written by Gary Dobbins (Dobbins@Arizona.Edu)
  4839. --------c-2FDF01BX4448-----------------------
  4840. INT 2F - HyperDisk v4.50+ - GET CURRENT CACHE STATE
  4841.     AX = DF01h
  4842.     BX = 4448h ('DH')
  4843. Return: AX = 0000h if function supported
  4844.         BX = number of cache buffers in use
  4845.         CX = number of cache buffers which have been modified
  4846.         DL = caching flags (see #2739)
  4847. Range:    AH=C0h to AH=FFh, selected by scanning AH=DFh, then AH=C0h-FFh
  4848. SeeAlso: AX=DF00h,AX=DF02h
  4849.  
  4850. Bitfields for HyperDisk caching flags:
  4851. Bit(s)    Description    (Table 2739)
  4852.  0    staged writes enabled for floppy disks
  4853.  1    staged writes enabled for hard disks
  4854.  2    writes verified on floppy disks
  4855.  3    writes verified on hard disks
  4856.  4    reserved (0)
  4857.  5    reserved (0)
  4858.  6    floppy caching enabled
  4859.  7    all caching functions enabled
  4860. --------Q-2FDF01-----------------------------
  4861. INT 2F U - Quarterdeck TELTSR.COM - CLOSE CONNECTION
  4862.     AX = DF01h
  4863. Return: nothing???
  4864. Note:    invokes the DESQview/X socket API (see INT 15/AX=DE2Eh) function 0006h
  4865.       to close the socket corresponding to the file handle set with
  4866.       AX=DF02h; NOP if no file handle was ever set
  4867. SeeAlso: AX=DF00h"TELTSR",AX=DF02h"TELTSR"
  4868. --------c-2FDF02BX4448-----------------------
  4869. INT 2F - HyperDisk v4.50+ - SET CACHE STATE
  4870.     AX = DF02h
  4871.     BX = 4448h ('DH')
  4872.     DL = new caching flags (see #2739)
  4873. Return: AX = 0000h if supported
  4874.         BX = number of cache buffers in use
  4875.         CX = number of cache buffers which have been modified
  4876.         DL = previous caching flags (see #2739)
  4877. Program: HyperDisk is a shareware disk cache by HyperWare (Roger Cross)
  4878. Range:    AH=C0h to AH=FFh, selected by scanning AH=DFh, then AH=C0h-FFh
  4879. SeeAlso: AX=DF00h,AX=DF01h
  4880. --------Q-2FDF02-----------------------------
  4881. INT 2F U - Quarterdeck TELTSR.COM - OPEN CONNECTION
  4882.     AX = DF02h
  4883.     BX = file handle for connection's socket
  4884. Return: AX = status
  4885.         0000h successful
  4886.         FFFFh no more room in TELTSR's JFT
  4887. Program: TELTSR is a Telnet TSR included with Quarterdeck's DESQview/X v2.00
  4888. Notes:    the indicated file handle becomes owned by TELTSR, and is closed in
  4889.       the caller's JFT
  4890.     multiple calls to this function will override the previous assignment
  4891.       without closing the previous file; use AX=DF01h before further calls
  4892. SeeAlso: AX=DF00h"TELTSR",AX=DF01h"TELTSR"
  4893. --------U-2FE000-----------------------------
  4894. INT 2F - SETDRVER.COM v2.10+ - INSTALLATION CHECK
  4895.     AX = E000h
  4896. Return: AX = 4A52h ("JR") if present
  4897. Program: SETDRVER is a public domain TSR by Jacob Rieper which sets the
  4898.       apparent DOS version analogously to MS-DOS SETVER
  4899. Notes:    this installation check differs from the usual one of returning AL=FFh
  4900.     the SETDRVER API is fully emulated by Matthias Paul's FREEVER
  4901. SeeAlso: AX=E000h/DX=4D50h,AX=E001h,INT 21/AH=52h
  4902. --------j-2FE000-----------------------------
  4903. INT 2F - KAOSHIDE - INSTALLATION CHECK
  4904.     AX = E000h
  4905. Return: AL = FFh if installed
  4906. Program: KAOSHIDE ('Hidden Kaos') is a PD joke TSR which randomly capitalizes
  4907.       alphabetic keys, written by Philip Maland. Although not a virus,
  4908.       v2.0 uses some viral-like techniques to hide itself from
  4909.       memory-reports by reducing DOS memory size.
  4910. --------U-2FE000DX4D50-----------------------
  4911. INT 2F - FREEVER v1.0+ - INSTALLATION CHECK
  4912.     AX = E000h
  4913.     DX = 4D50h ('MP')
  4914. Return: AL = FFh if installed
  4915.         AH = AMIS INT 2Dh multiplex ID
  4916.         CX = FREEVER version (CH=major, CL=minor)
  4917.         DX:DI -> AMIS-compliant signature (see #2224)
  4918.         (vendor ID is "M. Paul ", program name is "FREEVER ")
  4919. Program: FREEVER is an AMIS-conformant freeware DOS version-faking TSR similar
  4920.       to SETVER for any DOS-compatible OS, written by Matthias Paul
  4921. Note:    FREEVER emulates INT 21/AH=30h, INT 21/AX=3306h, INT 21/AX=4412h,
  4922.       INT 21/AX=4452h, and SETDRVER's API on INT 2F/AX=E00xh, as well as
  4923.       providing an AMIS API on INT 2Dh
  4924. SeeAlso: AX=E000h"SETDRVER",INT 21/AH=30h,INT 21/AX=3306h,INT 21/AX=4452h
  4925. --------K-2FE000DX5354-----------------------
  4926. INT 2F - StuffIt v3.21+ - INSTALLATION CHECK
  4927.     AX = E000h
  4928.     DX = 5354h ("ST")
  4929. Return: AL = FFh if installed
  4930.         BX = version (BH = major, BL = BCD minor)
  4931.         DX = segment of resident code
  4932. Program: StuffIt is a freeware delayed keyboard stuffer by Terje Mathisen
  4933. --------U-2FE001-----------------------------
  4934. INT 2F - SETDRVER.COM v2.10+ - GET SETDRVER VERSION
  4935.     AX = E001h
  4936. Return: AH = major version
  4937.     AL = minor version
  4938. SeeAlso: AX=E000h
  4939. --------U-2FE002-----------------------------
  4940. INT 2F - SETDRVER.COM v2.10+ - GET ORIGINAL DOS VERSION INFO
  4941.     AX = E002h
  4942. Return: AL = FFh if successful
  4943.         BH = major DOS version
  4944.         BL = minor DOS version
  4945.         CH = DOS version flag
  4946.         CL = OEM number
  4947.         DH = major DR DOS version number (FFh if unknown)
  4948.         DL = minor DR DOS version number (FFh if unknown)
  4949. SeeAlso: AX=E003h,AX=E007h,INT 21/AH=30h
  4950. --------U-2FE003-----------------------------
  4951. INT 2F - SETDRVER.COM v2.10+ - RESET INTERNAL VARIABLES
  4952.     AX = E003h
  4953.     BH = new major DOS version
  4954.     BL = new minor DOS version
  4955.     CH = new DOS version flag
  4956.     CL = new DOS revision number
  4957.     DH = new OEM number
  4958. SeeAlso: AX=E002h
  4959. --------U-2FE004-----------------------------
  4960. INT 2F - SETDRVER.COM v2.10+ - ENABLE TSR
  4961.     AX = E004h
  4962. Return: AL = FFh if successful
  4963. SeeAlso: AX=E000h,AX=E005h,AX=E006h
  4964. --------U-2FE005-----------------------------
  4965. INT 2F - SETDRVER.COM v2.10+ - DISABLE TSR
  4966.     AX = E005h
  4967. Return: AL = FFh if successful
  4968. SeeAlso: AX=E000h,AX=E004h,AX=E006h
  4969. --------U-2FE006-----------------------------
  4970. INT 2F - SETDRVER.COM v2.10+ - GET TSR STATUS
  4971.     AX = E006h
  4972. Return: AL = FFh if successful
  4973.         BL = status
  4974.         01h resident and active
  4975.         02h resident and inactive
  4976. --------U-2FE007-----------------------------
  4977. INT 2F - SETDRVER.COM v2.10+ - GET TaskMAX STATUS AT INSTALLATION
  4978.     AX = E007h
  4979. Return: AL = FFh if successful
  4980.         BL = status
  4981.         00h if TaskMAX not loaded before SETDRVER
  4982.         FFh if TaskMAX was loaded before SETDRVER
  4983. SeeAlso: AX=E003h
  4984. --------U-2FE0-------------------------------
  4985. INT 2F - SETDRVER.COM - RESERVED FOR FUTURE USE
  4986.     AH = E0h
  4987.     AL = 08h-10h
  4988. --------K-2FE100-----------------------------
  4989. INT 2F - Phantom2 v1.1+ - INSTALLATION CHECK
  4990.     AX = E100h
  4991. Return: AX = 0001h if installed
  4992.         DS:SI -> ASCIZ hotkey name
  4993.         DS:DI -> ASCIZ recording filename
  4994. Program: Phantom of the Keyboard II is a shareware keystroke recorder/replayer
  4995.       by P2 Enterprises
  4996. SeeAlso: AX=E101h,AX=E102h,AX=E103h,AX=E300h
  4997. Index:    hotkeys;Phantom2
  4998. --------K-2FE101-----------------------------
  4999. INT 2F - Phantom2 v1.1+ - FUNCTION REQUEST
  5000.     AX = E101h
  5001.     BX = function mask (see #2740)
  5002.     CX = code for hotkey (as returned by INT 16/AH=00h) if BX bit 6 set
  5003.     DS:DX -> ASCIZ filespec if BX bit 7 set
  5004. SeeAlso: AX=E100h
  5005. Index:    hotkeys;Phantom2
  5006.  
  5007. Bitfields for Phantom2 function mask:
  5008. Bit(s)    Description    (Table 2740)
  5009.  0    record
  5010.  1    play
  5011.  2    QuickPlay
  5012.  3    loop
  5013.  4    mode display toggle
  5014.  5    sound toggle
  5015.  6    set hotkey
  5016.  7    set filespec
  5017. --------K-2FE102-----------------------------
  5018. INT 2F - Phantom2 v1.1+ - UNINSTALL
  5019.     AX = E102h
  5020. Return: AX = status
  5021.         0001h removal successful
  5022.         0002h not installed as TSR
  5023.         FFFFh disabled but not removed
  5024. SeeAlso: AX=E100h
  5025. --------K-2FE103-----------------------------
  5026. INT 2F - Phantom2 v2.8 - SET ??? FLAG
  5027.     AX = E103h
  5028. Return: AX = 0001h
  5029. SeeAlso: AX=E100h
  5030. --------y-2FE200-----------------------------
  5031. INT 2F - SecureDevice - LOGIN TO DRIVE
  5032.     AX = E200h
  5033.     DL = drive number (0 = A:)
  5034.     DS:SI -> 104-byte key
  5035. Return: AL = status
  5036.         00h unable to determine key's validity
  5037.         01h key is valid
  5038.         FFh key is invalid
  5039. Program: SecureDevice is a copylefted device driver by Max Loewenthal and
  5040.       Arthur Helwig which turns one or more disk files into encrypted
  5041.       logical drives
  5042. SeeAlso: AX=E201h,AX=E203h,AX=E209h
  5043. --------y-2FE201-----------------------------
  5044. INT 2F - SecureDevice - GET INFORMATION
  5045.     AX = E201h
  5046.     DX = driver index (0000h = first loaded)
  5047. Return: AL = number of volumes handled by driver
  5048.     DL = drive number of first volume (00h = A:)
  5049. SeeAlso: AX=E200h,AX=E203h,AX=E209h
  5050. --------y-2FE203-----------------------------
  5051. INT 2F - SecureDevice - DESTROY PASSWORD (LOGOUT FROM DRIVE)
  5052.     AX = E203h
  5053.     DL = drive number (00h = A:) or FFh for all drives
  5054. Return: nothing
  5055. SeeAlso: AX=E200h,AX=E209h
  5056. --------y-2FE209DX0000-----------------------
  5057. INT 2F - SecureDevice - INSTALLATION CHECK
  5058.     AX = E209h
  5059.     DX = 0000h
  5060. Return: AX = 1DEAh if installed
  5061.         DX = number of drivers installed
  5062. --------K-2FE300-----------------------------
  5063. INT 2F - ANARKEY.COM - INSTALLATION CHECK
  5064.     AX = E300h
  5065. Return: AL = state
  5066.         00h not installed
  5067.         FEh if installed but suspended (v3.0+)
  5068.         FFh installed
  5069. Program: ANARKEY.COM is a commandline recall program by Steven Calwas
  5070. Range:    AH=C0h to AH=FFh, selected by commandline switch
  5071. SeeAlso: AX=E100h,AX=E301h,AX=E302h,AX=E303h,AX=E304h,AX=E305h,AX=E306h
  5072. SeeAlso: AX=E307h,INT 66"Newkey"
  5073. --------V-2FE300-----------------------------
  5074. INT 2F - Blank - INSTALLATION CHECK
  5075.     AX = E300h
  5076. Return: AL = FFh if installed
  5077.         ES = resident code segment
  5078. Program: Blank is a shareware screen blanker by Yonah Schmeidler
  5079. Note:    AH=E3h is the default, which may be reconfigured by the installation
  5080.       program in the registered version
  5081. SeeAlso: AH=93h,AX=C050h,INT 14/AX=AA01h
  5082. Index:    screen saver;Blank
  5083. --------K-2FE301-----------------------------
  5084. INT 2F U - ANARKEY.COM v2+ - GET ???
  5085.     AX = E301h
  5086. Return: DX:BX -> ??? (see #2741,#2742)
  5087. SeeAlso: AX=E300h
  5088.  
  5089. Format of returned data structure for ANARKEY v2.0:
  5090. Offset    Size    Description    (Table 2741)
  5091.  -7   7 BYTEs    signature ('ANARKEY')
  5092.  00h    WORD    ??? (I see 0001h in v2.0)
  5093.  02h    WORD    ??? (I see 0001h in v2.0)
  5094.  04h    WORD    ??? (I see 0 in v2.0)
  5095.  06h    WORD    PSP segment of next program loaded
  5096.  
  5097. Format of returned data structure for ANARKEY v3+:
  5098. Offset    Size    Description    (Table 2742)
  5099.  -1    BYTE    multiplex number
  5100.  00h    WORD    ??? (I see 0001h in v3.0-4.0)
  5101.  02h    WORD    ??? (I see 0001h in v3.0-4.0)
  5102.  04h    BYTE    ??? (I see 0 in v3.0-4.0)
  5103.  05h    WORD    PSP segment of next program loaded
  5104. --------K-2FE302-----------------------------
  5105. INT 2F U - ANARKEY.COM v3+ - ???
  5106.     AX = E302h
  5107.     BL = ???
  5108. Return: ???
  5109. SeeAlso: AX=E300h
  5110. --------K-2FE303-----------------------------
  5111. INT 2F U - ANARKEY.COM v3+ - ANARKMD API
  5112.     AX = E303h
  5113.     BL = function
  5114.         01h toggle insert mode
  5115.         02h display contents of history buffer
  5116.         03h write history buffer to file
  5117.         ES:DX -> file name
  5118.         04h clear history buffer
  5119.         05h undefine all aliases
  5120.         06h show aliases
  5121.         07h list programs using Unix switchar
  5122.         08h jump to bottom of history buffer
  5123.         09h (v4.0) add string to history buffer
  5124.         ES:DX -> ASCIZ string
  5125.         0Ah (v4.0) ???
  5126.         ES:DX -> ???
  5127.         0Bh (v4.0) copy string to edit buffer for use as next input line
  5128.         ES:DX -> ASCIZ string
  5129.         0Ch (v4.0) ???
  5130.         0Dh (v4.0) copy ??? to ???
  5131.         0Eh (v4.0) ???
  5132.         0Fh (v4.0) ???
  5133.         10h (v4.0) set ??? flag
  5134.         11h (v4.0) display error message about running in EMS under Windows
  5135. Return: ???
  5136. SeeAlso: AX=E300h
  5137. --------K-2FE304-----------------------------
  5138. INT 2F U - ANARKEY.COM v2+ - ???
  5139.     AX = E304h
  5140.     BL = ???
  5141. Return: ???
  5142. SeeAlso: AX=E300h
  5143. --------K-2FE305-----------------------------
  5144. INT 2F U - ANARKEY.COM v3+ - ENABLE/SUSPEND ANARKEY
  5145.     AX = E305h
  5146.     BL = new state
  5147.         01h suspended
  5148.         00h enabled
  5149. SeeAlso: AX=E300h
  5150. --------K-2FE306-----------------------------
  5151. INT 2F U - ANARKEY.COM v4.0 - GET ???
  5152.     AX = E306h
  5153. Return: AX = ???
  5154. SeeAlso: AX=E300h
  5155. --------K-2FE307-----------------------------
  5156. INT 2F U - ANARKEY.COM v4.0 - GET ???
  5157.     AX = E307h
  5158. Return: AX = ???
  5159.     BL = ???
  5160. SeeAlso: AX=E300h
  5161. --------K-2FE337-----------------------------
  5162. INT 2F - INT16.COM - INSTALLATION CHECK
  5163.     AX = E337h
  5164. Return: AX = 0013h if installed
  5165. Program: INT16.COM is an INT16 keyboard BIOS replacement for
  5166.       INT 16/AH=00h-02h,10h-12h (based on K3) written by Martin Gerdes
  5167.       and published in c't 05/1990.
  5168. SeeAlso: AX=ED58h
  5169. --------l-2FE44D-----------------------------
  5170. INT 2F - NDOS - API
  5171.     AX = E44Dh
  5172. Program: NDOS is a version of 4DOS licensed to Symantec for inclusion in the
  5173.       Norton Utilities
  5174. Note:    as NDOS is a licensed version of 4DOS v3.03, the API is identical to
  5175.       that for 4DOS, except that AH=E4h instead of D4h and the installation
  5176.       check returns AX=44EEh instead of AX=44DDh
  5177. SeeAlso: AX=D44Dh,AX=E44Eh
  5178. --------l-2FE44E-----------------------------
  5179. INT 2F C - NDOS - AWAITING USER INPUT
  5180.     AX = E44Eh
  5181.     BX = condition
  5182.         0000h NDOS is ready to display prompt
  5183.         0001h NDOS has displayed the prompt, about to accept user input
  5184. Return: handler must preserve SI, DI, BP, SP, DS, ES, and SS
  5185. SeeAlso: AX=E44Dh
  5186. --------K-2FE44FBX0000-----------------------
  5187. INT 2F - NDOS v4.0+ - KSTACK.COM - INSTALLATION CHECK
  5188.     AX = E44Fh
  5189.     BX = 0000h
  5190. Return: AX = 44EEh if installed
  5191. Program: NDOS is a version of 4DOS licensed to Symantec for inclusion in the
  5192.       Norton Utilities
  5193. Note:    this function is also supported by ANSIPLUS v3.01+ and K3PLUS v6.20+,
  5194.       which emulate the 4DOS and NDOS keystack
  5195. SeeAlso: AX=D44Fh/BX=0000h,AX=E44Fh/BX=0001h
  5196. --------K-2FE44FBX0001-----------------------
  5197. INT 2F - NDOS v4.0+ - KSTACK.COM - PLACE KEYSTROKES INTO KEYSTACK
  5198.     AX = E44Fh
  5199.     BX = 0001h
  5200.     CX = number of keystrokes (01h-FFh)
  5201.     DS:DX -> keystroke list (one word per keystroke)
  5202. Return: AX = status
  5203.         0000h successful
  5204.         nonzero failed
  5205.     BX,CX,DX destroyed
  5206. Notes:    the keystrokes are the exact values to return from subsequent calls to
  5207.       INT 16 with AH=00h,01h,10h, or 11h, with the following exceptions:
  5208.         0000h causes subfunctions 01h and 11h to indicate an empty
  5209.               keyboard buffer
  5210.         FFFFh is followed by a word indicating the number of clock
  5211.               ticks to delay before the next faked keystroke
  5212.     v4.00 KSTACK overwrites any unread keystrokes from the previous
  5213.       invocation, and does not range-check CX; it will overwrite memory
  5214.       following the resident portion if CX is greater than 100h.
  5215.     this function is also supported by ANSIPLUS v3.01+ and K3PLUS v6.20+,
  5216.       which emulate the 4DOS and NDOS keystack
  5217. SeeAlso: AX=E44Fh/BX=0000h,INT 16/AH=00h,INT 21/AX=4403h"DOS"
  5218. --------U-2FE600CL30-------------------------
  5219. INT 2F - Virtual 486 - INSTALLATION CHECK
  5220.     AX = E600h
  5221.     CL = 30h
  5222.     BX = C0DEh
  5223. Return: BX = DEC0h if installed
  5224. Program: Virtual 486 is a 80486 CPU emulator for an 80386 by Solar Designer
  5225. ----------2FE700BX4158-----------------------
  5226. INT 2F - Multiplex - ??? - INSTALLATION CHECK???
  5227.     AX = E700h
  5228.     BX = 4158h ("AX")
  5229.     CX = 4953h ("IS")
  5230.     DX = 4845h ("HE")
  5231. Return: AL = FFh if installed
  5232.         BX = 4C4Fh ("LO") if ??? installed
  5233.         CX = 4F4Bh ("OK")
  5234.         DX = 4F55h ("OU")
  5235.         ES:DI -> ???
  5236. Range:    AH=C0h to AH=FFh, selected by scanning AH=E7-FFh, then AH=C0h-E6h
  5237. Note:    called by QDPMI when its Real to Protected Mode Switch Entry Point
  5238.       is called
  5239. --------f-2FE77EBX0000-----------------------
  5240. INT 2F - CTDEMN - INSTALLATION CHECK
  5241.     AX = E77Eh
  5242.     BX = 0000h
  5243.     CX = 4F4Dh ('OM')
  5244.     DX = 5453h ('TS')
  5245. Return: AX = 7EE7h if installed
  5246.         BX = resident code segment
  5247.         CX = 6F6Dh ('om')
  5248.         DX = 7473h ('ts')
  5249. Program: CTDEMN is a file daemon TSR by Simultan AG
  5250. --------E-2FED00-----------------------------
  5251. INT 2F - Phar Lap DOS EXTENDERS - INSTALLATION CHECK
  5252.     AX = ED00h
  5253.     BL = DOS extender ID (see #2743)
  5254. Return: AL = status
  5255.         00h not installed
  5256.         FFh installed
  5257.         SI = 5048h ("PH")
  5258.         DI = 4152h ("AR")
  5259.         CH = major version number
  5260.         CL = minor version number
  5261.         DX = flags
  5262.             bit 0: running under DPMI
  5263.             bit 1: running under Phar Lap VMM
  5264.         if running under DPMI:
  5265.             BX = DPMI version (BH = major, BL = minor)
  5266. SeeAlso: AH=A1h,AX=F100h,AX=FBA1h
  5267.  
  5268. (Table 2743)
  5269. Values for Phar Lap DOS extender ID:
  5270.  01h    286dosx v1.3+ (Software Development Kit)
  5271.  02h    286dosx v1.3+ (Run-Time Kit)
  5272.  03h    386dosx v4.0+ (SDK)
  5273.  04h    386dosx v4.0+ (RTK)
  5274. --------E-2FED03-----------------------------
  5275. INT 2F R - Phar Lap 386/DOS-Extender v4.1 - GET EXTENDER ENTRY POINT
  5276.     AX = ED03h
  5277.     CX = real-mode code segment
  5278.     DX = real-mode data segment
  5279. Return: CF clear if successful
  5280.         CX = protected-mode code segment selector
  5281.         DX = protected-mode data segment selector
  5282.         ES:DI -> real-mode entry point for calling protected-mode functions
  5283.               (see INT 21/AX=250Dh)
  5284.     CF set on error
  5285.         AX = error code
  5286.         0008h unable to allocate LDT descriptors
  5287. --------E-2FED10BL05-------------------------
  5288. INT 2F - Pharlap DOS Extender - ???
  5289.     AX = ED10h
  5290.     BL = 05h
  5291.     ES:SI -> ??? structure
  5292. Return: AX = ???
  5293.     SI = ???
  5294.     DI = ???
  5295. SeeAlso: AX=ED00h,AX=ED11h
  5296. --------E-2FED11BL05-------------------------
  5297. INT 2F - Pharlap DOS Extender - FATAL EXIT TO REAL MODE ???
  5298.     AX = ED11h
  5299.     BL = 05h
  5300.     CX = ???
  5301.     DX = ???
  5302.     ES:SI -> ??? structure
  5303.     SS:SP = new stack ???
  5304. Return: ???
  5305. Note:    called immediately prior to terminating program with INT 21/AX=4CFFh
  5306. SeeAlso: AX=ED00h,AX=ED10h
  5307. --------K-2FED58-----------------------------
  5308. INT 2F U - K5.COM - INSTALLATION CHECK
  5309.     AX = ED58h
  5310. Return: AX = 000Dh if installed
  5311.         ES = resident code segment
  5312.         BX = ??? (9999h)
  5313.         ???
  5314. Program: K5 is an extended keyboard driver by Martin Gerdes, based on his K3
  5315. SeeAlso: AX=E337h,INT 16/AX=AF20h
  5316. --------E-2FED80-----------------------------
  5317. INT 2F - Phar Lap 286|DOS Extender Lite v2.5 - ???
  5318.     AX = ED80h
  5319.     BL = DOS extender ID (see #2743)
  5320.     SI = 5048h ("PH")
  5321.     DI = 4152h ("AR")
  5322.     ???
  5323. Return: ???
  5324. --------O-2FEDC8BX0000-----------------------
  5325. INT 2F - Novell ??? - INSTALLATION CHECK???
  5326.     AX = EDC8h ('EDC' = Novell European Development Center)
  5327.     BX = 0000h
  5328.     CX = 0000h
  5329.     DX = 1234h
  5330. Return: ???
  5331. Desc:    called by Novell DOS 7 LOCK command during installation; purpose
  5332.       unknown
  5333. --------y-2FEE00-----------------------------
  5334. INT 2F - GRIDLOC.EXE - INSTALLATION CHECK
  5335.     AX = EE00h
  5336. Return: AL = FFh if installed
  5337. Program: GRIDLOC is a PC security program by Intelligent Security Systems, Inc.
  5338. SeeAlso: INT 21/AH=40h"NB.SYS"
  5339. --------U-2FEE00-----------------------------
  5340. INT 2F - XVIEW - INSTALLATION CHECK
  5341.     AX = EE00h
  5342. Return: AX = 00FFh if installed
  5343. Program: XVIEW is a hypertext viewer by Flambeaux Software, Inc.
  5344. --------N-2FEE00-----------------------------
  5345. INT 2F - WEB v4.02 - INSTALLATION CHECK
  5346.     AX = EE00h
  5347. Return: AL = status
  5348.         00h not installed
  5349.         FFh installed
  5350. Program: WEB is an IPX-based peer-to-peer network by Webcorp.
  5351. SeeAlso: AH=EEh"WEB",AX=EEF0h
  5352. --------U-2FEE01-----------------------------
  5353. INT 2F - XVIEW - POP UP GIVING TOPIC SEARCH KEYWORD
  5354.     AX = EE01h
  5355.     DS:DX -> ASCIZ string containing case-insensitive keyword to look up
  5356. Return: AX = status (see #2744)
  5357. Note:    the specified keyword should be a hyperlink in the _IndexPage of some
  5358.       database; the current database is searched first
  5359. SeeAlso: AX=EE00h"XVIEW",AX=EE02h,AX=EE03h,AX=EE04h,AX=EE06h
  5360.  
  5361. (Table 2744)
  5362. Values for XVIEW function status:
  5363.  0000h    successful
  5364.  00F1h    unknown subfunction
  5365.  00F2h    unable to pop up
  5366. --------U-2FEE02-----------------------------
  5367. INT 2F - XVIEW - POP UP GIVING A PAGE NUMBER
  5368.     AX = EE02h
  5369.     DX = physical page number or anchor page number (see #2745)
  5370. Return: AX = status (see #2744)
  5371. Note:    physical page numbers are assigned by the hypertext compiler, and
  5372.       will change if a page is inserted in the middle
  5373. SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE05h,AX=EE06h
  5374.  
  5375. (Table 2745)
  5376. Values for XVIEW anchor page number:
  5377.  FFEAh    _Credits
  5378.  FFECh    _SearchTopics
  5379.  FFEDh    _SearchText
  5380.  FFF0h    _ManualList
  5381.  FFF5h    _HelpOnHelp
  5382.  FFF8h    _HomePage
  5383.  FFF9h    _IndexPage
  5384. --------U-2FEE03-----------------------------
  5385. INT 2F - XVIEW - POP UP GIVING FILENAME AND SEARCH TOPIC OR PAGE NUMBER
  5386.     AX = EE03h
  5387.     DS:DX -> data packet (see #2746)
  5388. Return: AX = status (see #2744)
  5389. SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE02h,AX=EE06h
  5390.  
  5391. Format of XVIEW data packet:
  5392. Offset    Size    Description    (Table 2746)
  5393.  00h    DWORD    -> ASCIZ database filespec (0000h:0000h for current database)
  5394.  04h    DWORD    -> ASCIZ text to look up or 0000h:0000h
  5395.  08h    WORD    page number (0000h if keyword used)
  5396.  0Ah  6 BYTEs    reserved
  5397. --------U-2FEE04-----------------------------
  5398. INT 2F - XVIEW - POP UP AND READ SCREEN FOR SEARCH TOPIC KEYWORD
  5399.     AX = EE04h
  5400. Return: AX = status (see #2744)
  5401. Note:    equivalent to the action taken when the user presses the Alt-L hotkey
  5402. SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE03h,AX=EE06h
  5403. --------U-2FEE05-----------------------------
  5404. INT 2F - XVIEW - POP UP TO MOST-RECENTLY VIEWED PAGE
  5405.     AX = EE05h
  5406. Return: AX = status (see #2744)
  5407. Note:    equivalent to the action taken when the user presses the Alt-H hotkey
  5408. SeeAlso: AX=EE00h"XVIEW",AX=EE02h,AX=EE06h
  5409. --------U-2FEE06-----------------------------
  5410. INT 2F - XVIEW - WAIT FOR POP-DOWN AND GET EXIT CODE
  5411.     AX = EE06h
  5412. Return: AX = status (see also AX=EE01h)
  5413.         0001h specified filename is not an xText database
  5414.         0002h no databases found
  5415.         0003h bad data in file
  5416.         0004h memory shortage
  5417.         0005h unable to open the requested file
  5418.         0007h invalid page number for file
  5419. Note:    although this call is not required, the exit code can alert the
  5420.       caller to problems; if the call is not made, the program should
  5421.       enforce a delay of about 1/2 second to allow the viewer to pop up,
  5422.       and should not get keyboard input or attempt disk accesses during
  5423.       the delay
  5424. SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE02h,AX=EE03h,AX=EE04h,AX=EE05h
  5425. --------N-2FEE-------------------------------
  5426. INT 2F - WEB v4.02 - WEB MODULE INSTALLATION CHECK
  5427.     AH = EEh
  5428.     AL = module ID (see #2747)
  5429. Return: AX = 0000h if installed
  5430.         ES:DI -> far entry point for module-specific API calls
  5431.           (see #2748,#2749,#2750,#2751,#2752)
  5432. Program: WEB is an IPX-based peer-to-peer network by Webcorp.
  5433. SeeAlso: AX=EE00h"WEB"
  5434.  
  5435. (Table 2747)
  5436. Values for WEB module ID:
  5437.  10h    server module (SERVER.EXE)
  5438.  20h    client module (CLIENT.EXE)
  5439.  30h    mail module (MAIL.EXE)
  5440.  40h    spooler (PCSPOOL.EXE)
  5441.  50h    kernel module (KERNEL.EXE)
  5442.  60h    SAP module (KERNEL.EXE)
  5443.  70h    resident station manager (SM.EXE)
  5444.  90h    router module (ROUTER.EXE)
  5445.  
  5446. (Table 2748)
  5447. Call server module entry point with:
  5448.     BX = function
  5449.         0000h remove server module
  5450.         Return: AX = status (0000h if successful, else WEB error code)
  5451.         0001h create SYSINFO file
  5452.         Note:    the SYSINFO file is used by the station manager when
  5453.               displaying info for a particular station
  5454.         0002h get server object table
  5455.         Return: CX = number of server objects
  5456.             ES:DI -> server object table
  5457.         Note:    server objects include drives and devices that the
  5458.               server module controls
  5459.         0003h get server variables
  5460.         Return: ES:DI -> server variables
  5461.  
  5462. (Table 2749)
  5463. Call client module entry point with:
  5464.     BX = function
  5465.         0000h remove client module
  5466.         Return: AX = status (0000h if successful, else WEB error code)
  5467.         0001h decrement client-only flag
  5468.         0002h increment client-only flag
  5469.         0005h set device capture
  5470.         Note:    decrements DeviceOutput flag, telling the spooler that
  5471.               it may trap device output again
  5472.         0006h clear device capture
  5473.         Note:    increments DeviceOutput flag, telling the spooler that
  5474.               it should not trap device output (this is used
  5475.               internally by the spooler to prevent it from trapping
  5476.               its own output)
  5477.         0007h get client debug pointer
  5478.         Return: ES:DI -> client debug data structure (see #2753)
  5479.         0008h get root drive
  5480.         Return: AL = WEB startup drive
  5481.         0009h get maximum possible drive/device redirections
  5482.         Return: AL = maximum drive redirections
  5483.             CH = maximum LPTx redirections
  5484.             CL = maximum COMx redirections
  5485.         000Ah suspend client
  5486.         Return: AX = previous value of Suspend flag
  5487.         000Bh resume client
  5488.         Return: AX = previous value of Suspend flag
  5489.         000Ch get instance data
  5490.         CX = maximum number of structures in array
  5491.         ES:DI -> buffer for array of WIN_INSTANCE_DATA structures
  5492.               (see #2754)
  5493.         Return: CX = number of structures actually returned
  5494.         Note:    used internally by WEB4WIN
  5495.  
  5496. (Table 2750)
  5497. Call mail module entry point with:
  5498.     BX = function
  5499.         0000h remove mail module
  5500.         Return: AX = status (0000h successful, else WEB error code)
  5501.         0001h set mail poll
  5502.         Note:    schedules the WEB mail module
  5503.         0002h set mail notify
  5504.         Note:    sets the Notify flag, which determines whether the
  5505.               user will be notified when mail is received
  5506.         0003h clear mail notify
  5507.         Note:    clears the Notify flag, which determines whether the
  5508.               user will be notified when mail is received
  5509.         0004h check whether new mail has arrived
  5510.         Return: AL = new mail status
  5511.                 00h no new mail since last call
  5512.                 else new mail has arrived
  5513.         Note:    also clears the new-mail flag after retrieving it
  5514.         0005h send notify
  5515.         ES:DI -> name of WEB user to be notified
  5516.         0006h get post office
  5517.         Return: ES:DI -> full network path of Post Office subdirectory
  5518.  
  5519. (Table 2751)
  5520. Call spooler entry point with:
  5521.     BX = function
  5522.         0000h remove PCSpool module
  5523.         Return: AX = status (0000h successful, else WEB error code)
  5524.         0001h set spooler poll
  5525.         Note:    schedules the WEB spooler
  5526.         0002h check spooler changed
  5527.         Return:    AX = 0000h
  5528.         Note:    this call is a NOP in current versions of WEB
  5529.  
  5530. (Table 2752)
  5531. Call kernel entry point with:
  5532.     BX = function
  5533.         0000h remove kernel module
  5534.         Return: AX = status (0000h successful, else WEB error code)
  5535.         0001h set kernel ^S filter
  5536.         DL = new state (00h don't filter ^S, nonzero do filter)
  5537.         0002h get kernel data area
  5538.         Return: ES:DI -> kernel data area
  5539.         0003h display dialog box
  5540.         CL = dialog box type
  5541.             00h password
  5542.             01h E-Note received notification
  5543.             02h Novell login
  5544.             03h general notification
  5545.         DL = number of rows to display
  5546.         ES:SI -> array of far pointers to rows to be displayed
  5547.         ES:DI -> Pascal-style input buffer
  5548.         Return: AX = status (0000h successful, else error code)
  5549.         0004h kernel service events
  5550.         0005h get kernel's in-critical-section flag
  5551.         Return: ES:DI -> kernel InCriticalSection flag
  5552.         0006h schedule DOS event
  5553.         AL = directive
  5554.             00h do not ignore WEB ExtraBusy flag
  5555.             01h ignore ExtraBusy flag
  5556.             02h (WEB4WIN) check that current Windows VM is foregrnd VM
  5557.         ES:SI -> WEB AES Event Control Block (ECB) (see #2755)
  5558.         Notes:    the WEB Asynchronous Event Scheduler is similar to the
  5559.               one used by IPX; this call schedules a special ECB
  5560.               to be executed at a later time.  Unlike IPX ECBs,
  5561.               the timeout must be set explicitly by the caller
  5562.             this function also calls function 0004h
  5563.         0007h check busy
  5564.         AL = directive
  5565.             00h do not ignore WEB ExtraBusy flag
  5566.             01h ignore ExtraBusy flag
  5567.             02h (WEB4WIN) check that current Windows VM is foregrnd VM
  5568.         Return: AX = status (0000h not busy, else busy)
  5569.         0008h set keyboard intercept
  5570.         Note:    currently a NOP which returns immediately
  5571.         0009h get keyboard intercept
  5572.         Note:    currently a NOP which returns immediately
  5573.         000Ah get dialog flags
  5574.         Return: ES:DI -> kernel dialog flags (see #2756)
  5575.         000Bh get network path
  5576.         Return: ES:DI -> fully-qualified network path of file where
  5577.                 the screen is stored on Dialog calls
  5578.         000Ch kernel alternate dialog
  5579.         CL = dialog box type
  5580.             00h password
  5581.             01h E-Note received notification
  5582.             02h Novell login
  5583.             03h general notification
  5584.         DL = number of rows to display
  5585.         ES:SI -> array of far pointers to rows to be displayed
  5586.         ES:DI -> Pascal-style input buffer
  5587.         Return: AX = status (0000h successful, else error code)
  5588.         Note:    this function is identical to function 0003h except
  5589.               that it does not notify WEB4WIN of the impending
  5590.               dialog request
  5591.         000Dh get machine/operating system type
  5592.         Return: AX = machine/operating system type
  5593.                 01h IBM PC, MS-DOS
  5594.                 02h IBM PC, DOSV (Japanese)
  5595.                 03h NEC PC-9800, JDOS (Japanese)
  5596.                 04h IBM PC, Korean DBC DOS
  5597.  
  5598. Format of client debug data structure:
  5599. Offset    Size    Description    (Table 2753)
  5600.  00h    WORD    total files
  5601.  02h    WORD    files free
  5602.  04h    WORD    no files
  5603.  06h    WORD    minimum files
  5604.  08h    WORD    total FCBs
  5605.  0Ah    WORD    total safe FCBs
  5606.  0Ch    WORD    FCBs in use
  5607.  0Eh    WORD    wrong FCB
  5608.  10h    WORD    compressed
  5609.  12h    WORD    retransmits
  5610.  
  5611. Format of WIN_INSTANCE_DATA structure:
  5612. Offset    Size    Description    (Table 2754)
  5613.  00h    DWORD    real-mode pointer to data to be instanced
  5614.  04h    WORD    size of data to be instanced
  5615.  
  5616. Format of WEB AES Event Control Block:
  5617. Offset    Size    Description    (Table 2755)
  5618.  00h    DWORD    link address
  5619.  04h    WORD    ESR address
  5620.  08h    BYTE    InUse flag
  5621.  09h    BYTE    completion code
  5622.  0Ah  3 BYTEs    reserved
  5623.  0Dh    WORD    timeout
  5624.  0Fh    BYTE    IgnoreExtra flag
  5625.  10h    WORD    PSP
  5626.  12h    DWORD    DTA
  5627.  16h    WORD    AX value for DOS critical information
  5628.  18h    WORD    BX value for DOS critical information
  5629.  1Ah    WORD    CX value for DOS critical information
  5630.  1Ch    WORD    DX value for DOS critical information
  5631.  
  5632. (Table 2756)
  5633. Values for kernel dialog flags:
  5634.  01h    dialog will timeout
  5635.  02h    display stars instead of entered keystrokes
  5636. --------N-2FEEF0-----------------------------
  5637. INT 2F - WEB v4.02 - WEB GENERAL NOTIFICATION
  5638.     AX = EEF0h
  5639.     BX = notification function ID (see #2757)
  5640. Return: varies by notification function
  5641. Program: WEB is an IPX-based peer-to-peer network by Webcorp.
  5642. Note:    the notification functions are used internally by WEB modules to notify
  5643.       other modules and external programs of actions or event, and should
  5644.       never be called by an application
  5645. SeeAlso: AX=EE00h"WEB"
  5646.  
  5647. (Table 2757)
  5648. Values for WEB Notification Function ID:
  5649.  00h    node added
  5650.  01h    node deleted
  5651.  02h    dial attempt
  5652.  03h    dial failed
  5653.  04h    file close
  5654.  05h    close connection
  5655.  07h    check Windows mode
  5656.  20h    link up
  5657.  21h    link down
  5658. --------K-2FF000-----------------------------
  5659. INT 2F U - 4MAP - INSTALLATION CHECK
  5660.     AX = F000h
  5661. Return: AX = 00FFh
  5662. Program: 4MAP is a keybinding program for 4DOS (see AX=D44Dh) by Ho-Ping Tseng
  5663. Note:    returns AX=00FFh for any value of AL not listed here
  5664. SeeAlso: AX=D44Dh,AX=F001h,AX=F002h
  5665. --------K-2FF001-----------------------------
  5666. INT 2F U - 4MAP - GET KEY MAPPINGS
  5667.     AX = F001h
  5668. Return: ES:BX -> key mappings
  5669. SeeAlso: AX=F000h
  5670. --------K-2FF002-----------------------------
  5671. INT 2F U - 4MAP - INSERT CHARACTER INTO ???
  5672.     AX = F002h
  5673.     BL = character to insert
  5674. Return: AX = status
  5675.         0000h successful
  5676.         0001h buffer full
  5677. SeeAlso: AX=F000h,AX=F003h
  5678. --------K-2FF003-----------------------------
  5679. INT 2F U - 4MAP - INSERT CHARACTER INTO ???
  5680.     AX = F003h
  5681.     BL = character to insert
  5682. Return: AX = status
  5683.         0000h successful
  5684.         0001h buffer full
  5685. Program: 4MAP is a keybinding program for 4DOS (see AX=D44Dh) by Ho-Ping Tseng
  5686. SeeAlso: AX=F000h,AX=F002h
  5687. --------m-2FF1-------------------------------
  5688. INT 2F U - MIN-MEM v2.11 - INSTALLATION CHECK
  5689.     AH = F1h
  5690.     AL <> F1h
  5691. Return: AL = F1h if installed
  5692. Program: MIN-MEM is a shareware TSR manager by Biologic which permits up to 24
  5693.       popup TSRs to be loaded but swapped out to disk, EMS, or XMS.     One
  5694.       TSR at a time is brought back into memory at the user's request.
  5695. --------E-2FF100-----------------------------
  5696. INT 2F - DOS EXTENDER INSTALLATION CHECK
  5697.     AX = F100h
  5698. Return: AL = FFh if DOS extender present
  5699.         SI = 444Fh ("DO")
  5700.         DI = 5358h ("SX")
  5701. Note:    supported or soon to be supported by Phar Lap, Rational, Ergo, and IGC
  5702. SeeAlso: AH=A1h,AX=ED00h,AX=FBA1h/BX=0081h,INT 15/AX=BF02h
  5703. --------W-2FF200-----------------------------
  5704. INT 2F - WINX - INSTALLATION CHECK
  5705.     AX = F200h
  5706. Return: AX = 00FFh if installed
  5707. Program: WINX is a DOS/Windows utilities by Al Williams which can be used to
  5708.       launch Windows applications from a DOS Box; it was published in
  5709.       "DOS and Windows Protected Mode-Programming with DOS Extenders"
  5710.       (Addison-Wesley) and should not be confused with the Windows driver
  5711.       of the same name which is part of the DESQview/X package
  5712. --------W-2FF201-----------------------------
  5713. INT 2F - WINX - RETURN ADDRESS OF SERVER BUFFER
  5714.     AX = F201h
  5715. Return: AX = status
  5716.         FFFFh if WINX is busy processing a different request
  5717.         0000h if successful
  5718.         BX:CX = address of server buffer (see #2758)
  5719.  
  5720. Format of WINX server buffer:
  5721. Offset    Size    Description    (Table 2758)
  5722.  00h    BYTE    command/status
  5723.         00h buffer available
  5724.         01h buffer contains result
  5725.         02h change directory
  5726.         03h execute program
  5727.         FFh terminate windows portion of WINX
  5728.  01h  ? BYTEs    command (03h) or directory (02h)
  5729.   or
  5730.  01h    DWORD    result (01h)
  5731. --------W-2FF202-----------------------------
  5732. INT 2F - WINX - SET SERVER'S WORKING DIRECTORY
  5733.     AX = F202h
  5734.     BX:CX -> directory
  5735. Return: AX = status
  5736.         FFFFh if WINX is busy processing a different request
  5737.         0000h if successful
  5738. SeeAlso: AX=F200h,AX=F203h
  5739. --------W-2FF203-----------------------------
  5740. INT 2F - WINX - EXECUTE COMMAND
  5741.     AX = F203h
  5742.     BX:CX -> command
  5743. Return: AX = status
  5744.         0000h if successful
  5745.         FFFFh if WINX is busy processing a different request
  5746. SeeAlso: AX=F200h,AX=F202h
  5747. --------G-2FF400-----------------------------
  5748. INT 2F - FINDIRQ.COM - INSTALLATION CHECK
  5749.     AX = F400h
  5750. Return: AL = 01h if installed
  5751. Program: FINDIRQ is a program by Rick Knoblaugh published in the 9/28/93 issue
  5752.       of PC Magazine; when run as a TSR it can determine which IRQs are
  5753.       used only when a device is active
  5754. SeeAlso: AX=F401h
  5755. --------N-2FF400-----------------------------
  5756. INT 2F - PowerLAN - INSTALLATION CHECK???
  5757.     AX = F400h
  5758.     ???
  5759. Return: ???
  5760. Note:    this function is called by PowerLAN's NET.EXE just prior to calling
  5761.       AX=F401h (get version)
  5762. SeeAlso: AX=F401h"PowerLAN"
  5763. --------N-2FF401-----------------------------
  5764. INT 2F - PowerLAN - GET VERSION
  5765.     AX = F401h
  5766. Return: ES:BX -> WORD containing 100*version (in decimal)
  5767. Program: PowerLAN is a networking product by Performance Technology
  5768. SeeAlso: AX=F400h"PowerLAN",AX=F483h"PowerLAN"
  5769. --------G-2FF401CX5121-----------------------
  5770. INT 2F - FINDIRQ.COM - GET HOOKED INTERRUPTS
  5771.     AX = F401h
  5772.     CX = 5121h ('Q!')
  5773. Return: AX:DX -> hooked interrupt table (see #2759)
  5774. SeeAlso: AX=F400h
  5775.  
  5776. Format of FINDIRQ hooked interrupt table:
  5777. Offset    Size    Description    (Table 2759)
  5778.  00h    BYTE    1Ch
  5779.  01h    DWORD    FINDIRQ's INT 1C handler
  5780.  05h    DWORD    original INT 1C handler
  5781.  09h    BYTE    28h
  5782.  0Ah    DWORD    FINDIRQ's INT 28 handler
  5783.  0Eh    DWORD    original INT 28 handler
  5784.  12h    BYTE    2Fh
  5785.  13h    DWORD    FINDIRQ's INT 2F handler
  5786.  17h    DWORD    original INT 2F handler
  5787. --------N-2FF483-----------------------------
  5788. INT 2F - PowerLAN - ???
  5789.     AX = F483h
  5790.     ???
  5791. Return: ???
  5792. SeeAlso: AX=F400h"PowerLAN",AX=F401h"PowerLAN"
  5793. --------d-2FF700-----------------------------
  5794. INT 2F - AUTOPARK.COM - INSTALLATION CHECK
  5795.     AX = F700h
  5796. Return: AL = state
  5797.         00h not installed
  5798.         FFh installed
  5799. Program: AUTOPARK.COM is a resident hard disk parker by Alan D. Jones
  5800. --------d-2FF701-----------------------------
  5801. INT 2F - AUTOPARK.COM - SET PARKING DELAY
  5802.     AX = F701h
  5803.     BX:CX = 32-bit count of 55ms timer ticks
  5804. --------d-2FF800CX4455-----------------------
  5805. INT 2F U - SuperStor PRO 2XON.COM - INSTALLATION CHECK
  5806.     AX = F800h
  5807.     CX = 4455h ("DU")
  5808.     DL = 45h ("E")
  5809. Return: AL = FFh if installed
  5810.         ES:BX -> ASCII signature "Universal Data Exchange"
  5811. Program: SuperStor is a disk-compression program by Addstor.
  5812. Note:    returns AX=0001h if AL is not 00h or 01h
  5813. SeeAlso: AX=1001h,AX=F801h
  5814. --------d-2FF801CX4455-----------------------
  5815. INT 2F U - SuperStor PRO 2XON.COM - UNINSTALL
  5816.     AX = F801h
  5817.     CX = 4455h ("DU")
  5818.     DL = 45h ("E")
  5819.     ES:BX = return address if successful
  5820. Return: at specified address if successfully removed from memory
  5821.     else
  5822.         AL = error code
  5823.         ???
  5824. Program: SuperStor is a disk-compression program by Addstor.
  5825. Note:    returns AX=0001h if AL is not 00h or 01h
  5826. SeeAlso: AX=1001h,AX=F800h
  5827. ----------2FFA00-----------------------------
  5828. INT 2F - Multiplex - ??? - INSTALLATION CHECK???
  5829.     AX = FA00h
  5830.     BX = ??? (0408h)
  5831.     CX = ??? (001Fh)
  5832.     DX = ??? (0102h)
  5833.     SI = ??? (5ACCh)
  5834.     DI = ??? (0632h)
  5835. Return: ???
  5836. Note:    called by WinEmacs at startup
  5837. ----------2FFA00-----------------------------
  5838. INT 2F - Multiplex - ??? - INSTALLATION CHECK???
  5839.     AX = FA00h
  5840.     BX = ??? (03FCh)
  5841.     CX = ??? (003Fh)
  5842.     DX = ??? (00FFh)
  5843.     SI = ??? (5AA6h)
  5844.     DI = ??? (0620h)
  5845. Return: ???
  5846. Note:    called by Matlab at startup
  5847. --------*-2FFB-------------------------------
  5848. INT 2F - Multiplex - RESERVED BY BORLAND INTERNATIONAL
  5849.     AH = FBh
  5850. SeeAlso: AX=FB42h/BX=0001h
  5851. --------f-2FFB-------------------------------
  5852. INT 2F U - Conner Backup Exec AUTORES - API
  5853.     AH = FBh
  5854.     BL = function number (00h-07h)
  5855.     ???
  5856. Return: ???
  5857. Program: AUTORES is a resident program launcher for unattended backups
  5858. --------a-2FFB00-----------------------------
  5859. INT 2F U - AutoBraille v1.1A - INSTALLATION CHECK
  5860.     AX = FB00h
  5861. Return: AX = 00FFh if installed
  5862. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  5863. SeeAlso: INT 10/AX=3800h,INT 14/AX=F0F1h
  5864. --------U-2FFB00-----------------------------
  5865. INT 2F U - Jot-It! v1.50 - INSTALLATION CHECK
  5866.     AX = FB00h
  5867. Return: AX = FFFFh if installed
  5868.         BX = version (BCD, BH=major, BL=minor)
  5869. SeeAlso: AX=FB03h"Jot-It",AX=FB01h"Jot-It"
  5870. --------a-2FFB01-----------------------------
  5871. INT 2F U - AutoBraille v1.1A - ???
  5872.     AX = FB01h
  5873.     ???
  5874. Return: ???
  5875. --------U-2FFB01-----------------------------
  5876. INT 2F U - Jot-It! v1.50 - GET USER NAME
  5877.     AX = FB01h
  5878. Return: DX:BX -> ASCIZ user name
  5879. SeeAlso: AX=FB02h"Jot-It"
  5880. --------a-2FFB02-----------------------------
  5881. INT 2F U - AutoBraille v1.1A - ???
  5882.     AX = FB02h
  5883. Return: AH = ???
  5884.     AL = ???
  5885. --------U-2FFB02-----------------------------
  5886. INT 2F U - Jot-It! v1.50 - GET MESSAGE DIRECTORY
  5887.     AX = FB02h
  5888. Return: DX:BX -> ASCIZ name of directory in which messages are stored
  5889. SeeAlso: AX=FB01h"Jot-It"
  5890. --------a-2FFB03-----------------------------
  5891. INT 2F U - AutoBraille v1.1A - GET NEXT ???
  5892.     AX = FB03h
  5893. Return: AX = ???
  5894. --------U-2FFB03-----------------------------
  5895. INT 2F U - Jot-It! v1.50 - UNINSTALL
  5896.     AX = FB03h
  5897. Return: resident code removed from memory
  5898. Note:    CAUTION: NO checks are performed to ensure that the interrupt vectors
  5899.       being unhooked (08h,09h,28h,2Fh) actually point at the Jot-It! code
  5900. SeeAlso: AX=FB00h"Jot-It"
  5901. --------a-2FFB-------------------------------
  5902. INT 2F U - AutoBraille v1.1A - SET ???
  5903.     AH = FBh
  5904.     AL = 04h-08h
  5905. Return: AX = 0000h
  5906. --------a-2FFB-------------------------------
  5907. INT 2F U - AutoBraille v1.1A - SET ???
  5908.     AH = FBh
  5909.     AL = 09h-0Fh (???, 0Eh = COM1, 0Fh = COM2)
  5910. Return: ???
  5911. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  5912. --------a-2FFB-------------------------------
  5913. INT 2F U - AutoBraille v1.1A - SET ???
  5914.     AH = FBh
  5915.     AL = 10h-1Fh
  5916.     ???
  5917. Return: ???
  5918. --------a-2FFB20-----------------------------
  5919. INT 2F U - AutoBraille v1.1A - SET ??? FLAGS
  5920.     AX = FB20h
  5921.     BL = flags to set
  5922. SeeAlso: AX=FB21h"AutoBraille"
  5923. --------a-2FFB21-----------------------------
  5924. INT 2F U - AutoBraille v1.1A - CLEAR ??? FLAGS
  5925.     AX = FB21h
  5926.     BL = flags to clear
  5927. SeeAlso: AX=FB20h"AutoBraille"
  5928. --------a-2FFB22-----------------------------
  5929. INT 2F U - AutoBraille v1.1A - SET ???
  5930.     AX = FB22h
  5931.     BL = ???
  5932. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  5933. --------a-2FFB28-----------------------------
  5934. INT 2F U - AutoBraille v1.1A - ???
  5935.     AX = FB28h
  5936.     BX = ???
  5937.     ???
  5938. Return: ???
  5939. SeeAlso: AX=FB29h"AutoBraille"
  5940. --------a-2FFB29-----------------------------
  5941. INT 2F U - AutoBraille v1.1A - ???
  5942.     AX = FB29h
  5943.     BX = ???
  5944.     ???
  5945. Return: ???
  5946. SeeAlso: AX=FB28h"AutoBraille"
  5947. --------a-2FFB-------------------------------
  5948. INT 2F U - AutoBraille v1.1A - SET ???
  5949.     AH = FBh
  5950.     AL = 2Bh-34h
  5951.     BX = ???
  5952. --------a-2FFB35-----------------------------
  5953. INT 2F U - AutoBraille v1.1A - SET ???
  5954.     AX = FB35h
  5955.     BL = ???
  5956. --------a-2FFB36-----------------------------
  5957. INT 2F U - AutoBraille v1.1A - SET ???
  5958.     AX = FB36h
  5959.     BL = ???
  5960. --------a-2FFB37-----------------------------
  5961. INT 2F U - AutoBraille v1.1A - SET ???
  5962.     AX = FB37h
  5963.     BL = ???
  5964. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  5965. --------E-2FFB42BX0001-----------------------
  5966. INT 2F PU - Borland C++ DPMILOAD.EXE - INSTALLATION CHECK???
  5967.     AX = FB42h
  5968.     BX = 0001h
  5969. Return: AX = version number??? (AL=major, AH=minor)
  5970.     CX = next-selector increment
  5971. ---BC2.0---
  5972.     ES:BX -> 80-byte buffer for ???
  5973.     DX = DPMI version
  5974. ---BC3.0---
  5975.     BX = ??? (0000h)
  5976.     DX = ???
  5977.     ES:SI -> list of valid selectors ???
  5978. Notes:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  5979.       as version 1.000, while the version distributed with BC++ 3.0
  5980.       identifies itself as version 1.0; the former is 10864 bytes, the
  5981.       latter 22180 bytes.  The BC2.0 version is a DPMI loader, while
  5982.       the BC3.0 version also adds a DPMI host and DOS extender
  5983.     the BC++ 2.0 version displays an error message if called with BX
  5984.       values other than 0001h-0008h
  5985. SeeAlso: AX=1687h,AX=FB42h/BX=1001h,AX=FB43h
  5986. --------E-2FFB42BX0002-----------------------
  5987. INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - ALLOCATE MEMORY
  5988.     AX = FB42h
  5989.     BX = 0002h
  5990.     CX = size in bytes
  5991.     DX = bit flags
  5992.         bit 2: set to allocate DOS memory, clear for DPMI memory
  5993.     SI = selector of descriptor to be modified to access allocated memory
  5994.     DI = selector of a second descriptor to be modified
  5995. Return: AX = ??? or 0000h on error
  5996.     CX:DX = linear base address of DPMI memory block
  5997.     SI:DI = handle for DPMI memory block or FFFFh:FFFFh
  5998.     ???
  5999. Note:    two segment descriptors may be set if a code and an aliased data
  6000.       segment are required; if only one descriptor is needed, SI should
  6001.       equal DI on entry
  6002. BUG:    when allocating DOS memory, the code computes the linear address by
  6003.       multiplying the segment number by 4 rather than shifting by 4
  6004. SeeAlso: AX=FB42h/BX=0003h,AX=FB42h/BX=0008h,INT 31/AX=0501h
  6005. --------E-2FFB42BX0002-----------------------
  6006. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ALLOCATE MEMORY
  6007.     AX = FB42h
  6008.     BX = 0002h
  6009.     ES:SI -> memory block info (see #2760)
  6010. Return: ???
  6011. Note:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  6012.       as version 1.000, while the version distributed with BC++ 3.0
  6013.       identifies itself as version 1.0; the former is 10864 bytes, the
  6014.       latter 22180 bytes.
  6015. SeeAlso: AX=FB42h/BX=0003h,AX=FB42h/BX=0008h,INT 31/AX=0501h
  6016.  
  6017. Format of DPMILOAD memory block info:
  6018. Offset    Size    Description    (Table 2760)
  6019.  00h    WORD    flags (see #2761)
  6020.  02h    DWORD    block size in bytes
  6021. ---DPMI memory block---
  6022.  06h    DWORD    DPMI memory block handle
  6023. ---DOS memory block---
  6024.  06h    WORD    real-mode segment of memory block
  6025.  08h    WORD    selector of memory block
  6026. ---
  6027.  0Ah    DWORD    linear address of memory
  6028.  0Eh    WORD    memory operation error code
  6029.         0008h no more free LDT descriptors
  6030. ---if flags bit 0 clear---
  6031.  10h    WORD    code segment selector for memory block or 0000h or FFFFh
  6032.  12h    WORD    data alias selector for memory block or 0000h or FFFFh
  6033. ---if flags bit 0 set---
  6034.  10h    WORD    data segment selector for memory block or 0000h or FFFFh
  6035.  12h    WORD    unused???
  6036.  
  6037. Bitfields for DPMILOAD memory block flags:
  6038. Bit(s)    Description    (Table 2761)
  6039.  0    set if data segment rather than code segment
  6040.  1    information valid
  6041.  2    set if DOS memory block rather than DPMI memory block
  6042.  4    ???
  6043.  15    set if no LDT selectors for memory block???
  6044. SeeAlso: #2760
  6045. --------E-2FFB42BX0003-----------------------
  6046. INT 2F PU - Borland C++ DPMILOAD.EXE - GET AVAILABLE MEMORY
  6047.     AX = FB42h
  6048.     BX = 0003h
  6049. Return: DX:AX = size of largest free block in paragraphs
  6050.         0000h:0000h on error (BC3.0 version only)
  6051. Note:    AX and DX are destroyed on error, but no other error indicator is
  6052.       returned, under the BC++ 2.0 version of DPMILOAD
  6053. SeeAlso: AX=FB42h/BX=0002h
  6054. --------E-2FFB42BX0004-----------------------
  6055. INT 2F PU - Borland C++ DPMILOAD.EXE - LOAD PROTECTED-MODE EXECUTABLE???
  6056.     AX = FB42h
  6057.     BX = 0004h
  6058.     DS:DX -> ASCIZ filename of protected-mode executable
  6059. Return: CX = selector of ??? or 0000h
  6060. ---BC3.0---
  6061.     DX = status (0000h,FFF4h,others???) (see #2762)
  6062. Note:    the filename may also be terminated by a CR rather than a NUL under the
  6063.       BC++ 3.0 version of DPMILOAD
  6064.  
  6065. (Table 2762)
  6066. Values for DPMILOAD function status:
  6067.  0000h    successful
  6068.  0001h    ??? failure
  6069.  0002h    invalid selector
  6070.  0004h    unknown error
  6071.  0008h    no more LDT descriptors available???
  6072.  FFDEh    unable to set descriptor
  6073.  FFDFh    unable to get segment base address
  6074.  FFE0h    ???
  6075.  FFF2h    invalid parameter value
  6076.  FFF4h    component of filename too long (name not in 8.3 format)
  6077.  FFF5h    pathname too long (>79 chars)
  6078.  FFF6h    ???
  6079.  FFF8h    ???
  6080.  FFF9h    index out of range
  6081.  FFFAh    ???
  6082.  FFFCh    invalid access to code segment???
  6083.  FFFEh    ???
  6084.  FFFFh    general error
  6085. --------E-2FFB42BX0005-----------------------
  6086. INT 2F PU - Borland C++ DPMILOAD.EXE - GET ADDRESS OF ??? BY NAME
  6087.     AX = FB42h
  6088.     BX = 0005h
  6089.     CX = selector of DPMILOAD data (see #2763)
  6090.     DS:DX -> ASCIZ or CR-terminated name of ??? (case ignored)
  6091. Return: DX = status (see #2762)
  6092.         0000h successful
  6093.         AX:BX -> ??? FAR function (called with two words on top of stk)
  6094.         else
  6095.         BX destroyed
  6096. SeeAlso: AX=FB42h/BX=0006h,AX=FB42h/BX=000Eh
  6097.  
  6098. Format of DPMILOAD data:
  6099. Offset    Size    Description    (Table 2763)
  6100.  00h 12 BYTEs    ???
  6101.  0Ch    WORD    ??? bit flags
  6102.  0Eh 14 BYTEs    ???
  6103.  1Ch    WORD    number of memory control records (see #2766)
  6104.  1Eh 25 BYTEs    ???
  6105.  37h    BYTE    ??? bit flags
  6106.         bit 4: data valid???
  6107.  38h  4 BYTEs    ???
  6108.  3Ch    WORD    ???
  6109.  3Eh 12 BYTEs    ???
  6110.  46h    BYTE    ??? counter
  6111.  47h    BYTE    ???
  6112.  48h    BYTE    ???
  6113.  49h    BYTE    ???
  6114.  4Ah    WORD    ???
  6115.  4Ch  2 BYTEs    ???
  6116.  4Eh    WORD    offset of array of 64-byte memory control records
  6117.  52h    WORD    offset of name list (see #2764)
  6118.  54h  4 BYTEs    ???
  6119.  58h    WORD    offset of array of 6-byte objects (see #2765)
  6120.  5Ah  8 BYTEs    ???
  6121.  62h  9 BYTEs    ASCIZ name for ???
  6122.  6Bh  9 BYTEs    ASCIZ name for ???
  6123.     ???
  6124.  
  6125. Format of name list entry [array]:
  6126. Offset    Size    Description    (Table 2764)
  6127.  00h    BYTE    length of name (00h if end of array)
  6128.  01h  N BYTEs    name
  6129.  N+1    WORD    1-based index into array of unknown 6-byte objects
  6130.  
  6131. Format of 6-byte objects:
  6132. Offset    Size    Description    (Table 2765)
  6133.  00h    BYTE    ???
  6134.  01h    BYTE    ???
  6135.  02h    BYTE    ???
  6136.  03h    BYTE    1-based index of memory control record
  6137.  04h    WORD    ???
  6138.  
  6139. Format of memory control record:
  6140. Offset    Size    Description    (Table 2766)
  6141.  00h 20 BYTEs    memory block info (see #2760)
  6142.  14h  6 BYTEs    ???
  6143.  1Ah    BYTE    ???
  6144.  1Bh  2 BYTEs    ???
  6145.  1Dh    BYTE    ??? bit flags
  6146.  1Eh 14 BYTEs    ???
  6147.  2Ch    DWORD    pointer to ??? memory control record or 0000h:0000h
  6148.  30h    DWORD    pointer to ??? memory control record or 0000h:0000h
  6149.  34h    DWORD    pointer to next??? memory control record or 0000h:0000h
  6150.  38h    DWORD    pointer to prev??? memory control record or 0000h:0000h
  6151.  3Ch  4 BYTEs    ???
  6152. Note:    the pointers at offsets 2Ch and 30h form a doubly-linked list, as do
  6153.       the pointers at offsets 34h and 38h
  6154. --------E-2FFB42BX0006-----------------------
  6155. INT 2F PU - Borland C++ DPMILOAD.EXE - GET ADDRESS OF ??? BY NUMBER
  6156.     AX = FB42h
  6157.     BX = 0006h
  6158.     CX = selector of DPMILOAD data (see #2763)
  6159.     DX = 1-based index into array of ??? 6-byte objects
  6160. Return: DX = status (see #2762)
  6161.         0000h successful
  6162.         AX:BX -> ??? FAR function (called with two words on top of stk)
  6163.         else
  6164.         BX destroyed
  6165. SeeAlso: AX=FB42h/BX=0005h,AX=FB42h/BX=000Eh
  6166. --------E-2FFB42BX0007-----------------------
  6167. INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - ???
  6168.     AX = FB42h
  6169.     BX = 0007h
  6170.     CX = selector of ???
  6171. Return: ???
  6172. Note:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  6173.       as version 1.000, while the version distributed with BC++ 3.0
  6174.       identifies itself as version 1.0; the former is 10864 bytes, the
  6175.       latter 22180 bytes.
  6176. --------E-2FFB42BX0007-----------------------
  6177. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  6178.     AX = FB42h
  6179.     BX = 0007h
  6180.     CX = selector of DPMILOAD data (see #2763)
  6181.     ???
  6182. Return: DX = status (see #2762)
  6183.         0000h successful
  6184.         AX = ???
  6185. --------E-2FFB42BX0008-----------------------
  6186. INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - FREE MEMORY BLOCK
  6187.     AX = FB42h
  6188.     BX = 0008h
  6189.     CX = bit flags
  6190.         bit 2: set if DPMI memory, clear if DOS memory
  6191.     DX = selector of DOS memory block
  6192.     SI:DI = handle of DPMI memory block
  6193. Return: DX = 0000h on error, unchanged if succcessful
  6194. Note:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  6195.       as version 1.000, while the version distributed with BC++ 3.0
  6196.       identifies itself as version 1.0; the former is 10864 bytes, the
  6197.       latter 22180 bytes.
  6198. SeeAlso: AX=FB42h/BX=0002h
  6199. --------E-2FFB42BX0008-----------------------
  6200. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - FREE MEMORY BLOCK
  6201.     AX = FB42h
  6202.     BX = 0008h
  6203.     ES:SI -> memory block info (see #2760)
  6204. Return: ???
  6205. SeeAlso: AX=FB42h/BX=0009h
  6206. --------E-2FFB42BX0009-----------------------
  6207. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - RESIZE MEMORY BLOCK
  6208.     AX = FB42h
  6209.     BX = 0009h
  6210.     ES:SI -> memory block info (see #2760)
  6211.     ???
  6212. Return: ???
  6213. SeeAlso: AX=FB42h/BX=0008h"3.0"
  6214. --------E-2FFB42BX000A-----------------------
  6215. INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - INIT DPMI HOST AND SPAWN SUBSHELL
  6216.     AX = FB42h
  6217.     BX = 000Ah
  6218.     CX = 0001h
  6219.     DX = ???
  6220.     SI = ???
  6221. Return: after user exits subshell
  6222. Notes:    this call is used by DPMIRES; unlike most of the DPMILOAD calls, this
  6223.       function is not available in protected mode.
  6224.     the BC2.0 version of DPMILOAD is purely a DPMI loader, while the BC3.0
  6225.       version also adds a DPMI host and DOS extender.
  6226. SeeAlso: AX=FB42h/BX=0004h,AX=FB42h/BX=0015h
  6227. --------E-2FFB42BX000B-----------------------
  6228. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - UNUSED
  6229.     AX = FB42h
  6230.     BX = 000Bh
  6231. --------E-2FFB42BX000C-----------------------
  6232. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - FREE DESCRIPTORS FOR MEMORY BLOCK???
  6233.     AX = FB42h
  6234.     BX = 000Ch
  6235.     ES:SI -> memory block info ??? (see #2760)
  6236. Return: DX = status???
  6237. SeeAlso: AX=FB42h/BX=000Fh
  6238. --------E-2FFB42BX000D-----------------------
  6239. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SIMULATE REAL MODE INTERRUPT
  6240.     AX = FB42h
  6241.     BX = 000Dh
  6242.     CX = number of words to copy from protected-mode to real mode stack
  6243.     DL = interrupt number
  6244.     DH = flags
  6245.         bit 0: reset the interrupt controller and A20 line
  6246.     ES:DI -> real-mode call structure (see #2780 at INT 31/AX=0300h)
  6247. Return: CX = status
  6248.         0000h successful
  6249.         0001h failed
  6250. SeeAlso: INT 31/AX=0300h
  6251. --------E-2FFB42BX000E-----------------------
  6252. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ADDRESS OF ???
  6253.     AX = FB42h
  6254.     BX = 000Eh
  6255.     DS:DX -> ASCIZ or CR-terminated name of ???
  6256. Return: CX = selector of DPMILOAD data (see #2763) corresponding to name,
  6257.           0000h on error
  6258. SeeAlso: AX=FB42h/BX=0006h,AX=FB42h/BX=001Fh
  6259. --------E-2FFB42BX000F-----------------------
  6260. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - REALLOCATE LDT DESCRPS TO MEMBLK???
  6261.     AX = FB42h
  6262.     BX = 000Fh
  6263.     ES:SI -> memory block info (see #2760)
  6264. Return: ???
  6265. SeeAlso: AX=FB42h/BX=000Ch
  6266. --------E-2FFB42BX0010-----------------------
  6267. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - CONVERT SEGMENT TO SELECTOR
  6268.     AX = FB42h
  6269.     BX = 0010h
  6270.     DX = segment number
  6271. Return: CX = status (0000h,0008h) (see also AX=FB42h/BX=0004h)
  6272.         0000h successful
  6273.         DX = selector number for descriptor
  6274.         0008h failed
  6275. SeeAlso: AX=FB42h/BX=0023h
  6276. --------E-2FFB42BX0011-----------------------
  6277. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  6278.     AX = FB42h
  6279.     BX = 0011h
  6280.     CX = selector of DPMILOAD data (see #2763)
  6281.     ???
  6282. Return: DX = status (0000h,0002h,FFFEh) (see also #2762)
  6283.         0000h successful
  6284.         AX:BX -> ??? name
  6285.         FFFEh ??? error
  6286. --------E-2FFB42BX0012-----------------------
  6287. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  6288.     AX = FB42h
  6289.     BX = 0012h
  6290.     CX = selector for ???
  6291. Return: CX = selector for ???
  6292. --------E-2FFB42BX0013-----------------------
  6293. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  6294.     AX = FB42h
  6295.     BX = 0013h
  6296.     CX = selector of DPMILOAD data (see #2763)
  6297.     DX = 1-based index of ???
  6298. Return: CX = status (0000h,0002h,FFF9h) (see also #2762)
  6299.         0000h successful
  6300.         BX = ??? or 0000h
  6301.         FFF9h ??? error
  6302. --------E-2FFB42BX0014-----------------------
  6303. INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - INSTALLATION CHECK
  6304.     AX = FB42h
  6305.     BX = 0014h
  6306.     CX = 0001h
  6307. Return: BX = 0000h if installed
  6308. Note:    unlike most of the DPMILOAD functions, this call is available only in
  6309.       real or V86 mode
  6310. SeeAlso: AX=FB42h/BX=0001h,AX=FB42h/BX=000Ah
  6311. --------E-2FFB42BX0015-----------------------
  6312. INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - UNINSTALL
  6313.     AX = FB42h
  6314.     BX = 0015h
  6315.     CX = 0001h
  6316. Return: ???
  6317. Note:    unlike most of the DPMILOAD functions, this call is available only in
  6318.       real or V86 mode
  6319. SeeAlso: AX=FB42h/BX=000Ah
  6320. --------E-2FFB42BX0016-----------------------
  6321. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???
  6322.     AX = FB42h
  6323.     BX = 0016h
  6324.     CX = selector of DPMILOAD data (see #2763)
  6325. Return: DX = status (see also AX=FB42h/BX=0004h)
  6326.         0000h successful
  6327.         CX = ???
  6328. --------E-2FFB42BX0017-----------------------
  6329. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  6330.     AX = FB42h
  6331.     BX = 0017h
  6332.     CX = ???
  6333.     DX = ???
  6334.     ???
  6335. Return: DX = status (0000h,0001h) (see #2762)
  6336. --------E-2FFB42BX0018-----------------------
  6337. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET ???
  6338.     AX = FB42h
  6339.     BX = 0018h
  6340.     CX = ???
  6341. --------E-2FFB42BX0019-----------------------
  6342. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  6343.     AX = FB42h
  6344.     BX = 0019h
  6345.     CX = selector for ???
  6346.     ???
  6347. Return: DX = status (see also AX=FB42h/BX=0004h)
  6348.         0000h successful
  6349.         CX = selector for ???
  6350. --------E-2FFB42BX001A-----------------------
  6351. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  6352.     AX = FB42h
  6353.     BX = 001Ah
  6354.     CX = selector for ???
  6355.     ???
  6356. Return: DX = status (see also AX=FB42h/BX=0004h)
  6357.         0000h successful
  6358.         0004h failed
  6359.     CX:BX -> ???
  6360. --------E-2FFB42BX001B-----------------------
  6361. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  6362.     AX = FB42h
  6363.     BX = 001Bh
  6364.     CX = selector of DPMILOAD data (see #2763)
  6365.     DX = offset of ???
  6366. Return: DX = status (0000h,0002h) (see also #2762)
  6367.         0000h successful
  6368.         BX = selector for ???
  6369.         CX = selector for ???
  6370. --------E-2FFB42BX001C-----------------------
  6371. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  6372.     AX = FB42h
  6373.     BX = 001Ch
  6374.     ES = selector for DPMILOAD data (see #2763)
  6375.     CX = 1-based index of ???
  6376.     DX = 1-based index of ???
  6377. Return: DX = status (0000h,0002h,FFF9h) (see #2762)
  6378. --------E-2FFB42BX001D-----------------------
  6379. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???
  6380.     AX = FB42h
  6381.     BX = 001Dh
  6382. Return: CX:DX = ???
  6383. --------E-2FFB42BX001E-----------------------
  6384. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  6385.     AX = FB42h
  6386.     BX = 001Eh
  6387.     CX = ???
  6388.     ???
  6389. Return: DX = status (see also AX=FB42h/BX=0004h)
  6390.         0000h successful
  6391.         FFF7h ??? error
  6392.     CX:BX -> ???
  6393. --------E-2FFB42BX001F-----------------------
  6394. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ADDRESS OF ???
  6395.     AX = FB42h
  6396.     BX = 001Fh
  6397.     DS:DX -> 8-character name of ???
  6398.     ???
  6399. Return: CX = selector of DPMILOAD data (see #2763) for ???
  6400.         0000h on error
  6401. SeeAlso: AX=FB42h/BX=000Eh
  6402. --------E-2FFB42BX0020-----------------------
  6403. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - NULL FUNCTION???
  6404.     AX = FB42h
  6405.     BX = 0020h
  6406. Return: DX = ??? (always 0000h)
  6407. --------E-2FFB42BX0021-----------------------
  6408. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET PROCESSOR EXCEPTION HANDLER VECT
  6409.     AX = FB42h
  6410.     BX = 0021h
  6411.     CL = exception number (00h-1Fh)
  6412. Return: DX = status (see also AX=FB42h/BX=0004h)
  6413.         0000h successful
  6414.         AX:BX = selector:offset of handler
  6415.         FFF2h unable to get exception handler vector
  6416. SeeAlso: AX=FB42h/BX=0022h,AX=FB42h/BX=0024h,INT 31/AX=0202h
  6417. --------E-2FFB42BX0022-----------------------
  6418. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET PROCESSOR EXCEPTION HANDLER VECT
  6419.     AX = FB42h
  6420.     BX = 0022h
  6421.     CL = exception number (00h-1Fh)
  6422.     SI:DX = selector:offset of new handler
  6423. Return: DX = status (0000h,0004h,FFF2h) (see #2762)
  6424. SeeAlso: AX=FB42h/BX=0021h,AX=FB42h/BX=0025h,INT 31/AX=0203h
  6425. --------E-2FFB42BX0023-----------------------
  6426. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - CONVERT SELECTOR TO SEGMENT NUMBER
  6427.     AX = FB42h
  6428.     BX = 0023h
  6429.     CX = selector
  6430. Return: DX = status (see also AX=FB42h/BX=0004h)
  6431.         0000h successful
  6432.         CX = real-mode segment number
  6433.         FFF2h descriptor has invalid base address for real-mode segment
  6434. SeeAlso: AX=FB42h/BX=0010h
  6435. --------E-2FFB42BX0024-----------------------
  6436. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET PROTECTED-MODE INTERRUPT VECTOR
  6437.     AX = FB42h
  6438.     BX = 0024h
  6439.     CL = interrupt number
  6440. Return: DX = status (0000h) (see also AX=FB42h/BX=0004h)
  6441.     AX:BX = selector:offset of handler
  6442. SeeAlso: AX=FB42h/BX=0025h,INT 31/AX=0204h
  6443. --------E-2FFB42BX0025-----------------------
  6444. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET PROTECTED-MODE INTERRUPT VECTOR
  6445.     AX = FB42h
  6446.     BX = 0025h
  6447.     CL = interrupt number
  6448.     SI:DX = selector:offset of new handler
  6449. Return: DX = status (0000h,0004h,FFF2h) (see #2762)
  6450. SeeAlso: AX=FB42h/BX=0024h,INT 31/AX=0205h
  6451. --------E-2FFB42BX0026-----------------------
  6452. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  6453.     AX = FB42h
  6454.     BX = 0026h
  6455.     CX = selector of DPMILOAD data (see #2763)
  6456.     DX = 1-based index of ???
  6457.     ???
  6458. Return: DX = status (0000h,0002h,FFF9h) (see #2762)
  6459.         0000h successful
  6460.         BX = offset of ??? within data structure
  6461. --------E-2FFB42BX0027-----------------------
  6462. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???
  6463.     AX = FB42h
  6464.     BX = 0027h
  6465.     CX = selector of DPMILOAD data (see #2763)
  6466.     DX = offset of ???
  6467. Return: DX = status (see also AX=FB42h/BX=0004h)
  6468.         0000h successful
  6469.         BX = ???
  6470. --------E-2FFB42BX0080-----------------------
  6471. INT 2F U - ??? - CALLED BY Borland C++ 3.0 DPMILOAD.EXE
  6472.     AX = FB42h
  6473.     BX = 0080h
  6474.     ???
  6475. Return: AX = ???
  6476.     ???
  6477. --------E-2FFB42BX0081-----------------------
  6478. INT 2F U - ??? - CALLED BY Borland C++ 3.0 DPMILOAD.EXE
  6479.     AX = FB42h
  6480.     BX = 0081h
  6481.     ???
  6482. Return: AX = ???
  6483.     ???
  6484. --------E-2FFB42BX1001-----------------------
  6485. INT 2F U - Borland RTM.EXE 1.0 - INSTALLATION CHECK???
  6486.     AX = FB42h
  6487.     BX = 1001h
  6488. Return: BX = 0000h
  6489. SeeAlso: AX=FB42h/BX=0001h,AX=FB42h/BX=1002h,AX=FB42h/BX=1003h
  6490. --------E-2FFB42BX1002-----------------------
  6491. INT 2F U - Borland RTM.EXE 1.0 - ???
  6492.     AX = FB42h
  6493.     BX = 1002h
  6494.     ???
  6495. Return: ???
  6496. SeeAlso: AX=FB42h/BX=1001h
  6497. --------E-2FFB42BX1003-----------------------
  6498. INT 2F U - Borland RTM.EXE 1.0 - ???
  6499.     AX = FB42h
  6500.     BX = 1003h
  6501.     ???
  6502. Return: ???
  6503. SeeAlso: AX=FB42h/BX=1001h
  6504. --------E-2FFB43-----------------------------
  6505. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - NULL FUNCTION
  6506.     AX = FB43h
  6507.     BX = subfunction (at least 0000h-000Eh)
  6508. Notes:    this function is only present in protected mode; it does nothing but
  6509.       an immediate IRET
  6510.     DPMILOAD.EXE itself calls various subfunctions:
  6511.         subfunction 0004h is called with CX=selector of ???, DI=selector
  6512.           of DPMILOAD data
  6513.         subfunction 0008h is called with CX=selector of DPMILOAD data
  6514. SeeAlso: AX=FB42h/BX=0001h
  6515. --------G-2FFB43BX0100-----------------------
  6516. INT 2F PU - Borland TDX - INSTALLATION CHECK
  6517.     AX = FB43h
  6518.     BX = 0100h
  6519. Return: BX = FB43h if loaded
  6520. Program: TDX is Borland's Turbo Debugger variant for DPMI programs
  6521. Note:    Borland Pascal 7 DPMI programs use this call to check whether they
  6522.       should install their own stack and general protection exception
  6523.       handlers, or allow TDX to handle those exceptions
  6524. --------a-2FFB64-----------------------------
  6525. INT 2F U - AutoBraille v1.1A - GET ???
  6526.     AX = FB64h
  6527. Return: AX = ??? (0006h seen)
  6528. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  6529. --------E-2FFBA1BX0081-----------------------
  6530. INT 2F U - TKERNEL (Borland DOS extender) - INSTALLATION CHECK
  6531.     AX = FBA1h
  6532.     BX = 0081h
  6533.     ES:DI -> 16-byte buffer
  6534. Return: if installed, first four bytes of ES:DI buffer are "IABH"
  6535. Program: TKERNEL is a licensed version of AI Architects/Ergo's OS/x86.
  6536. Note:    TKERNEL was present only in Borland C++ 2.0; with version 3.0, the DOS
  6537.       extender was moved into DPMILOAD.
  6538. SeeAlso: AH=A1h,AX=F100h,AX=FBA1h/BX=0082h,AX=FBA1h/BX=0084h,INT 15/AX=BF02h
  6539. SeeAlso: INT 21/AX=4403h"AI Architects"
  6540. --------E-2FFBA1BX0082-----------------------
  6541. INT 2F U - TKERNEL (Borland DOS extender) - GET ENTRY POINT
  6542.     AX = FBA1h
  6543.     BX = 0082h
  6544.     ES:DI -> response buffer (see #2767)
  6545. Return: ES:DI buffer filled
  6546. SeeAlso: AX=FBA1h/BX=0081h,AX=FBA1h/BX=0084h
  6547.  
  6548. Format of TKERNEL response buffer:
  6549. Offset    Size    Description    (Table 2767)
  6550.  00h  4 BYTEs    signature "IABH"
  6551.  04h    DWORD    pointer to FAR extender entry point (see #2768)
  6552.  
  6553. (Table 2768)
  6554. Call TKERNEL entry point with:
  6555.     AX = function number
  6556.         0000h initialize???
  6557.         STACK:    WORD  ???
  6558.         Return: AX = status???
  6559.             STACK unchanged
  6560.         0001h get version???
  6561.         Return: AX = 0200h for v2.0.34
  6562.         0002h get ???
  6563.         Return: AX = ??? (011Eh or 0182h seen)
  6564.         0003h load protected-mode executable
  6565.         STACK:    DWORD -> ASCIZ filename of executable
  6566.             DWORD    ???
  6567.             DWORD -> program arguments (counted string plus CR)
  6568.             DWORD -> environment for protected-mode executable
  6569.                 (terminated with two consecutive NULs)
  6570.             DWORD -> WORD buffer for ???
  6571.         Return: AX = status???
  6572.             STACK unchanged
  6573.         0004h get descriptor
  6574.         STACK:    WORD    selector for which to get descriptor
  6575.             WORD    segment number (when running in real mode)
  6576.             DWORD -> buffer for descriptor
  6577.         Return: CF clear if successful
  6578.                 buffer filled
  6579.             CF set on error
  6580.                 AX destroyed???
  6581.             STACK unchanged
  6582.         0005h ???
  6583.         STACK:    WORD    selector for ???
  6584.             WORD    subfunction number???
  6585.                 0000h run previously-loaded program???
  6586.                 0001h ??? (similar to 0000h)
  6587.                 0002h
  6588.                 0003h
  6589.                 0005h ??? (similar to 0000h and 0001h)
  6590.         Return: AX = status???
  6591.             STACK unchanged
  6592.         0006h ???
  6593.         STACK:    WORD ???
  6594.             DWORD -> WORD (call) max iterations of ???
  6595.                       (ret) remaining iterations
  6596.         Return: AX = ???
  6597.             STACK unchanged
  6598.         0007h unused
  6599.         Return: AX = 0001h
  6600.         0008h unused
  6601.         Return: AX = 0001h
  6602.         0009h copy protected-mode memory into conventional memory
  6603.         STACK:    WORD    selector for source segment
  6604.             WORD    segment of source if in real mode???
  6605.             DWORD    offset of source
  6606.             WORD    number of bytes to copy
  6607.             DWORD -> low-memory destination
  6608.         Return: AX = status
  6609.             STACK unchanged
  6610.         000Ah copy conventional memory into protected-mode memory
  6611.         STACK:    WORD    selector for destination segment
  6612.             WORD    segment of destination if in real mode???
  6613.             DWORD    offset of destination
  6614.             WORD    number of bytes to copy
  6615.             DWORD -> low-memory source
  6616.         Return: AX = status
  6617.             STACK unchanged
  6618.         000Bh get ??? pointers
  6619.         STACK:    WORD desired pointer
  6620.                 0000h get ???
  6621.                 0002h get protected-mode CR3
  6622.                 0003h get 4K page table buffer pointer
  6623.                 else Return: DX:AX = FFFFh:FFFFh
  6624.         Return: DX:AX = requested pointer
  6625.             STACK unchanged
  6626.         000Ch set ??? pointers
  6627.         STACK:    WORD desired pointer
  6628.                 0000h set ???
  6629.                 0002h set protected-mode CR3
  6630.                 0003h set 4K page table buffer pointer
  6631.                 else ignore
  6632.             DWORD new value for pointer
  6633.         Return: STACK unchanged
  6634.         000Dh get ??? pointers
  6635.         STACK:    WORD desired pointer
  6636.                 0000h get ???
  6637.                 0001h get ???
  6638.                 0002h get ???
  6639.                 0003h get ???
  6640.                 0004h get ???
  6641.                 0005h get ???
  6642.                 0006h get ???
  6643.                 0007h get ???
  6644.                 else Return: DX:AX = FFFFh:FFFFh
  6645.         Return: DX:AX = desired pointer
  6646.             STACK unchanged
  6647.         000Eh set ??? pointer
  6648.         STACK:    WORD desired pointer
  6649.                 0000h set ???
  6650.                 0001h set ???
  6651.                 0002h set ???
  6652.                 0003h set ???
  6653.                 0004h set ???
  6654.                 0005h set ???
  6655.                 0006h set ???
  6656.                 0007h set ???
  6657.                 else Return: DX:AX = FFFFh:FFFFh
  6658.         Return: STACK unchanged
  6659.         000Fh get ???
  6660.         Return: AX = ??? (seen 0008h)
  6661.         0010h get ???
  6662.         Return: AX = ???
  6663.         0011h determine whether selector is valid
  6664.         STACK:    WORD    possible selector
  6665.         Return: AX = selector or 0000h if invalid
  6666.             STACK unchanged
  6667.         0012h get physical address
  6668.         STACK:    WORD    selector for desired segment
  6669.             WORD    segment number if in real mode
  6670.             DWORD    offset within segment
  6671.         Return: DX:AX = 32-bit physical address or 00000000h on error
  6672.             BX destroyed
  6673.             STACK unchanged
  6674.         0013h ???
  6675.         Note:    normally jumps to code for function 0012h
  6676.         0014h copy protected-mode memory to conventional memory, with ???
  6677.         STACK:    WORD    selector for source segment
  6678.             WORD    segment of source if in real mode???
  6679.             DWORD    offset of source
  6680.             WORD    number of bytes to copy
  6681.             DWORD -> low-memory destination
  6682.         Return: AX = status???
  6683.             STACK unchanged
  6684.         0015h copy conventional memory to protected-mode memory, with ???
  6685.         STACK:    WORD    selector for destination segment
  6686.             WORD    segment of destination if in real mode???
  6687.             DWORD    offset of destination
  6688.             WORD    number of bytes to copy
  6689.             DWORD -> low-memory source
  6690.         Return: AX = status???
  6691.             STACK unchanged
  6692.         0016h set ??? pointer
  6693.         STACK:    WORD    unused
  6694.             DWORD -> ??? or 0000h:0000h
  6695.         Return: AX = 0000h
  6696.             STACK unchanged
  6697.         0017h allocate real-mode procedure???
  6698.         STACK:    DWORD    ASCIZ name of procedure
  6699.             DWORD ???
  6700.             DWORD    address of subroutine to invoke
  6701.         Return: AX = status
  6702.                 0032h procedure by that name exists
  6703.                 0033h no more real-mode procedures available
  6704.             DX destroyed
  6705.             STACK unchanged
  6706.         0018h unused
  6707.         Return: AX = 0001h
  6708.         0019h get parameter block
  6709.         Return: DX:AX -> parameter block (format unknown at this time,
  6710.                   but 92h bytes)
  6711.                   (preceded by signature "!!PARAM-BLOCK!!")
  6712.         001Ah get ???
  6713.         Return: AX = ??? (0148h seen)
  6714.         001Bh free real-mode procedure???
  6715.         STACK:    DWORD -> ASCIZ name of procedure
  6716.         Return: ???
  6717.             STACK unchanged
  6718.         001Ch check whether packets from protected mode task pending
  6719.         Return: AX = 0001h if packets pending, 0000h if not
  6720.         001Dh set ???
  6721.         STACK:    DWORD ??? or 0000h:0000h
  6722.         Return: AX,BX destroyed
  6723.             STACK unchanged
  6724.         001Eh ???
  6725.         STACK:    WORD ??? (high byte ignored)
  6726.             DWORD -> data structure (below)
  6727.         Return: AX,BX,CX,DX destroyed
  6728.             data structure updated
  6729.             STACK unchanged
  6730.         Format of data structure:
  6731.         Offset    Size    Description
  6732.          00h  2 BYTEs    unused
  6733.          02h    WORD    ???
  6734.          04h    WORD    ???
  6735.          06h    WORD    ???
  6736.          08h  2 BYTEs    unused
  6737.          0Ah    WORD    ???
  6738.          0Ch    WORD    (call) ???
  6739.                 (ret) offset of this data structure (BUG?)
  6740.         001Fh set ???
  6741.         STACK:    WORD ??? (set to 0001h if zero)
  6742.         Return: AX destroyed
  6743.             STACK unchanged
  6744.         0020h ???
  6745.         STACK:    DWORD -> ??? (8 bytes of data)
  6746.         Return: AX = ???
  6747.             STACK unchanged
  6748.         0021h ???
  6749.         STACK:    DWORD -> ??? (8 bytes of data)
  6750.             WORD    ???
  6751.             WORD    ???
  6752.         Return: AX = ???
  6753.             STACK unchanged
  6754.         0022h ???
  6755.         STACK:    DWORD -> ??? (8 bytes of data)
  6756.             DWORD -> 4-byte buffer for results
  6757.         Return: AX = ???
  6758.             STACK unchanged
  6759.         0023h ???
  6760.         STACK:    DWORD -> ??? (8 bytes of data)
  6761.         Return: AX = ???
  6762.             STACK unchanged
  6763.         0024h set ???
  6764.         STACK:    WORD ???
  6765.         Return: AX destroyed
  6766.             STACK unchanged
  6767.         0025h get ???
  6768.         Return: AX = ??? (value set with func 0024h)
  6769.         0026h BUG: jumps to hyperspace due to fencepost error
  6770.         FFFFh set DOS memory management functions
  6771.         BX:SI -> FAR routine for allocating DOS memory
  6772.               (called with AH=48h,BX=number of paragraphs to alloc;
  6773.               returns CF clear, AX=segment of allocated memory, or
  6774.                   CF set on error)
  6775.         CX:DI -> FAR routine for freeing DOS memory
  6776.               (called with AH=49h,ES=segment of block to free;
  6777.               returns CF set on error, AX=error code)
  6778.         Note: each of these pointers normally points at INT 21/RETF
  6779.         other Return: AX = 0001h
  6780. Note:    BX may be destroyed by any of the API calls
  6781. --------E-2FFBA1BX0084-----------------------
  6782. INT 2F U - TKERNEL (Borland DOS extender) - UNINSTALL
  6783.     AX = FBA1h
  6784.     BX = 0084h
  6785.     ES:DI -> response buffer (see #2769)
  6786. Return: ES:DI buffer filled
  6787. SeeAlso: AX=FBA1h/BX=0081h,AX=FBA1h/BX=0084h
  6788.  
  6789. Format of TKERNEL response buffer:
  6790. Offset    Size    Description    (Table 2769)
  6791.  00h  4 BYTEs    signature "IABH"
  6792.  04h    WORD    success indicator
  6793.         0001h failed (INT 2F hooked by another program)
  6794.         unchanged if successful
  6795.  06h    WORD    segment of ???
  6796.  08h    WORD    segment of ??? memory block to free if nonzero
  6797.  0Ah    WORD    segment of ??? memory block to free if nonzero
  6798. --------s-2FFBFBES0000-----------------------
  6799. INT 2F U - SoundBlaster speech driver - INSTALLATION CHECK
  6800.     AX = FBFBh
  6801.     ES = 0000h
  6802. Return: ES nonzero if installed
  6803.         ES:BX -> entry point data structure (see #2770)
  6804. SeeAlso: INT 80/BX=0000h,INT F3"SoundBlaster"
  6805.  
  6806. Format of SoundBlaster entry point data structure:
  6807. Offset    Size    Description    (Table 2770)
  6808.  00h  3 BYTEs    signature "FB "
  6809.  03h    BYTE    driver major version number???
  6810.  04h    DWORD    speech driver entry point (see #2771)
  6811.  08h 24 BYTEs    ???
  6812.  20h  ? BYTEs    data buffer for calling speech driver
  6813.           (can be 117 bytes or more)
  6814.  
  6815. (Table 2771)
  6816. Call SoundBlaster speech driver entry point with:
  6817.     AL = function
  6818.         07h speak a string
  6819.         data buffer (see #2770) contains:
  6820.             BYTE  length of string
  6821.               N BYTEs string to speak
  6822. --------K-2FFD12-----------------------------
  6823. INT 2F - KS/KEYSTKCT.EXE - INSTALLATION CHECK
  6824.     AX = FD12h
  6825. Return: AX = 0093h if installed
  6826.         ES = resident code segment
  6827.         ES:CX -> internal "putbuf" routine
  6828. Program: KS/KEYSTKCT.EXE is a key stacking utility (4DOS KEYSTACK.SYS
  6829.       look-alike) by Martin Gerdes, published in c't 11/1991, which can be
  6830.       loaded as a device driver or as a TSR. It does not emulate 4DOS
  6831.       KSTACK API
  6832. Note:    the default buffer size is 128 keys
  6833. --------N-2FFE00BX4454-----------------------
  6834. INT 2F - PC-NFS ??? - INSTALLATION CHECK
  6835.     AX = FE00h
  6836.     BX = 4454h ("DT")
  6837.     CX = 4B52h ("KR")
  6838.     DX = 4E4Dh ("NM")
  6839. Return: AL = FFh if installed
  6840.        BX = 524Eh ("RM")
  6841.        CX = 4D44h ("MD")
  6842.        DX = 544Bh ("TK")
  6843. Note:    DV/X 1.10 DVPCNFS.DVR searches AH=FEh,FFh,C0h-FDh for a valid response
  6844. SeeAlso: AX=FE08h
  6845. --------N-2FFE00BX4454-----------------------
  6846. INT 2F - PC-NFS ??? - INSTALLATION CHECK
  6847.     AX = FE00h
  6848.     BX = 4454h ("DT")
  6849.     CX = 4B52h ("KR")
  6850.     DX = 544Dh ("TM")
  6851. Return: AL = FFh if installed
  6852.        BX = 5254h ("RT")
  6853.        CX = 4D44h ("MD")
  6854.        DX = 544Bh ("TK")
  6855. Note:    DV/X 1.10 DVPCNFS.DVR searches AH=FEh,FFh,C0h-FDh for a valid response
  6856. SeeAlso: AX=FE08h
  6857. --------U-2FFE00DI4E55-----------------------
  6858. INT 2F U - NORTON UTILITIES 5.0+ TSRs - INSTALLATION CHECK/STATUS REPORT
  6859.     AX = FE00h
  6860.     DI = 4E55h ("NU")
  6861.     SI = TSR identifier (see #2772)
  6862. Return: SI = TSR reply
  6863.         lowercase version of SI on entry (i.e. SI OR 2020h)
  6864.         execpt SMARTCAN v8.0, which returns SI=6673h ('fs')
  6865.     AH = status
  6866.         00h installed but disabled internally
  6867.         01h installed and enabled
  6868.     AL = installed product
  6869.         00h NCACHE-x or DISKREET
  6870.         01h SPEEDRV / FILESAVE / EP / DISKMON v6+ installed
  6871.         02h NCACHE2 / SMARTCAN
  6872.         45h DISKMON v5 installed
  6873.     BX = length of *.INI file (DISKMON and FILESAVE/EP/SMARTCAN only)
  6874.           (see #2773,#2774)
  6875.     CX = segment of resident portion
  6876.         FFFFh if completely loaded high (NCACHE)
  6877. ---FILESAVE/EP---
  6878.     DL = ??? (apparently always 00h)
  6879. ---DISKMON---
  6880.     DX = ??? (apparently always 1AE6h [v5] / 1B86h [v6] / 1C26h [v7])
  6881. Notes:    the value returned in CX is incorrect for NCACHE 6.00
  6882.     all Norton Caches install as SMARTAAR drivers like SMARTDRV v3
  6883.     NCACHE2 and SPEEDRV both support the SMARTDRV v4+ installation check
  6884.     to detect Diskreet NDisk drives use CDS/DPB (see INT 21/AH=52h)
  6885. SeeAlso: AX=4A10h/BX=0000h,AX=FE01h,AX=FE02h,AX=FE03h,AX=FE04h,AX=FE05h
  6886. SeeAlso: INT 21/AX=4402h"SMARTDRV"
  6887.  
  6888. (Table 2772)
  6889. Values for Norton Utilities TSR identifier:
  6890.  4346h    ("CF") NCACHE-F (v5) / NCACHE (v6) / NCACHE2 (v7+) / SPEEDRV
  6891.  4353h    ("CS") NCACHE-S (v5 only)
  6892.  4443h    ("DC") DISKREET
  6893.  444Dh    ("DM") DISKMON
  6894.  4653h    ("FS") FILESAVE (v5) / EP (v6) / SMARTCAN (v7+)
  6895.  
  6896. Format of DISKMON.INI file:
  6897. Offset    Size    Description    (Table 2773)
  6898. -6Ch 108 BYTEs    (in memory copy only)
  6899.         list of filenames which are always protected:
  6900.           IBMBIO.COM/IBMDOS.COM, IO.SYS/MSDOS.SYS, TBIOS.SYS/TDOS.SYS,
  6901.           MIO.SYS/IO.BIN, COMMAND.COM
  6902.  00h    BYTE    ??? always 01h
  6903.  01h    BYTE    disk light (00h off, 01h on)
  6904.  02h    BYTE    disk protection (00h off, 01h on)
  6905.  03h    BYTE    protected areas
  6906.         01h system area
  6907.         02h files
  6908.         03h system area and files
  6909.         04h entire disk
  6910.  04h    BYTE    floppy access (00h not allowed, 01h allowed)
  6911.  05h 27 BYTEs    filename extension list (9 entries)
  6912.         (lowercase, blank padded or = 000000h)
  6913.  20h 240 BYTEs    filename list (20 entries)
  6914.         (lowercase, name and extension blank padded, with '.')
  6915. Note:    CX:0508h -> copy in installed TSR (v5)
  6916.     CX:052Fh -> copy in installed TSR (v6)
  6917.     CX:04E0h -> copy in installed TSR (v7-v8)
  6918.  
  6919. Format of FILESAVE.INI / EP.INI / SMARTCAN.INI file:
  6920. Offset    Size    Description    (Table 2774)
  6921.  00h 26 BITs    drive list (bit set: file protection on, cleared: off):
  6922.  00h    BYTE    drives    A: - H:
  6923.  01h    BYTE    drives    I: - P:
  6924.  02h    BYTE    drives    Q: - X:
  6925.  03h    BYTE    drives    Y: - Z:
  6926.  04h    BYTE    which files to protect
  6927.         00h all files
  6928.         01h all files with extension in list
  6929.         02h all files except those with extension in list
  6930.  05h 27 BYTEs    filename extension list (9 entries, uppercase, ASCIZ)
  6931.  20h    BYTE    include files with archive bit clear (00h no, 01h yes)
  6932.  21h    WORD    number of days after which files are purged (0 = never)
  6933.  23h    WORD    max kilobytes of erased file space to hold (0 = all)
  6934. Note:    CX:03D2h -> copy in installed TSR (v5)
  6935.     CX:03F5h -> copy in installed TSR (v6)
  6936.     CX:0434h -> copy in installed TSR (v7-v8)
  6937. --------U-2FFE00DX474F-----------------------
  6938. INT 2F - GO! v3.22+ - API
  6939.     AX = FE00h
  6940.     DX = 474Fh ('GO')
  6941.     SI = function number
  6942.         0063h (BCD for '?') installation check
  6943.         0078h (BCD for 'N') non-registered search (two levels only)
  6944.         0082h (BCD for 'R') reserved for registered version
  6945.         0083h (BCD for 'S') reserved for registered version
  6946.         0085h (BCD for 'U') uninstall
  6947.     BX:CX -> buffer (for search functions)
  6948.         buffer filled with search spec, i.e. "APL" to get first
  6949.           directory containing the substring APL, ":\APL" to find
  6950.           the first top-level directory beginning with the letters
  6951.           APL
  6952. Return: BX:CX buffer filled with result (search functions only)
  6953.         result is counted ASCIZ directory name, empty string if
  6954.         no matches (i.e. first byte is length of name, followed by
  6955.         name)
  6956. Program: GO! is a shareware directory locator TSR by Steve Ryckman
  6957. Note:    the application-supplied buffer for the requests and results which
  6958.       BX:CX points at must lie outside the conventional (low-640K)
  6959.       memory, since the TSR swaps memory on pop-up; a common location is
  6960.       the last 96 bytes of the video memory or a UMB
  6961. --------U-2FFE01DI4E55-----------------------
  6962. INT 2F U - NORTON UTILITIES 5.0+ TSRs - ENABLE
  6963.     AX = FE01h
  6964.     DI = 4E55h ("NU")
  6965.     SI = TSR identifier (see #2772)
  6966. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)
  6967.     AX = status
  6968.         0002h successful (DISKMON, FILESAVE, EP)
  6969.         FE00h successful (NCACHE-x, DISKREET)
  6970. Notes:    if the enable/disable calls are used on DISKMON or NCACHE-x, the status
  6971.       report generated by the programs still indicates the previous state,
  6972.       and DISKMON.INI is not updated
  6973.     apparently has no effect on DISKREET
  6974. SeeAlso: AX=FE00h,AX=FE02h
  6975. --------U-2FFE02DI4E55-----------------------
  6976. INT 2F U - NORTON UTILITIES 5.0+ TSRs - DISABLE
  6977.     AX = FE02h
  6978.     DI = 4E55h ("NU")
  6979.     SI = TSR identifier (see #2772)
  6980. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)
  6981.     AX = status
  6982.         0004h successful (DISKMON, FILESAVE)
  6983.         FE00h successful (NCACHE-x, DISKREET)
  6984. Notes:    (see also AX=FE01h)
  6985.     this function appears to be unsafe, as the cache buffers are not
  6986.       flushed
  6987. SeeAlso: AX=FE00h,AX=FE01h
  6988. --------U-2FFE03DI4E55-----------------------
  6989. INT 2F U - NORTON UTILITIES 5.0+ TSRs - FLUSH BUFFERS
  6990.     AX = FE03h
  6991.     DI = 4E55h ("NU")
  6992.     SI = TSR identifier (see #2772)
  6993. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)
  6994.     AX = status
  6995.         0006h successful???
  6996. Notes:    only supported by DISKMON, FILESAVE, and NCACHE-x
  6997.     useful for flushing NCACHE before rebooting
  6998. SeeAlso: AX=FE00h,AX=FE10h
  6999. --------U-2FFE04DI4E55-----------------------
  7000. INT 2F U - NORTON UTILITIES 5.0+ DISKMON, FILESAVE / EP - internal - ???
  7001.     AX = FE04h
  7002.     DI = 4E55h ("NU")
  7003.     SI = TSR identifier (see #2772)
  7004. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h)
  7005.     AX = status
  7006.         0008h successful???
  7007. SeeAlso: AX=FE00h
  7008. --------U-2FFE05DI4E55-----------------------
  7009. INT 2F U - NORTON UTILITIES 5.0+ DISKMON, FILESAVE / EP - internal - ???
  7010.     AX = FE05h
  7011.     DI = 4E55h ("NU")
  7012.     SI = TSR identifier (see #2772)
  7013. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h)
  7014.     AX = status
  7015.         000Ah successful???
  7016. Note:    reportedly dangerous
  7017. SeeAlso: AX=FE00h
  7018. --------N-2FFE08-----------------------------
  7019. INT 2F - PC-NFS ??? - GET ???
  7020.     AX = FE08h
  7021. Return: ES:BX -> ???
  7022. Notes:    DV/X 1.10 DVPCNFS.DVR searches AH=FEh,FFh,C0h-FDh for a valid response
  7023.     both the driver responding to AX=FE00h/DX=4E4Dh and the one responding
  7024.       to AX=FE00h/DX=544Dh support this function
  7025. SeeAlso: AX=FE00h/BX=4454h
  7026. --------U-2FFE10DI4E55-----------------------
  7027. INT 2F U - NORTON UTILITIES 6.0 NCACHE - REBOOT
  7028.     AX = FE10h
  7029.     DI = 4E55h ("NU")
  7030.     SI = TSR identifier (see #2772)
  7031. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h)
  7032.     AX = status
  7033. Note:    probably used to flush NCACHE buffers and reboot when Ctrl-Alt-Del is
  7034.       detected
  7035. SeeAlso: AX=FE03h
  7036. --------S-2FFEEF-----------------------------
  7037. INT 2F - RTS Control TSR - INSTALLATION CHECK
  7038.     AX = FEEFh
  7039. Return: AX = EFFEh if installed
  7040.         BX = port address
  7041. Program: RTS Control TSR is a utility by Michal Szokolo to lower the RTS
  7042.       signal on a COM port during disk accesses to avoid losing incoming
  7043.       data
  7044. --------N-2FFF00-----------------------------
  7045. INT 2F - Topware Network Operating System - INSTALLATION CHECK
  7046.     AX = FF00h
  7047. Return: AL = status
  7048.         00h not installed, OK to install
  7049.         01h not installed, not OK to install
  7050.         FFh installed
  7051. SeeAlso: AX=FF01h,AX=FF02h,AX=FF10h,INT 21/AX=FF00h"Topware",INT 7A"Topware"
  7052. --------N-2FFF01-----------------------------
  7053. INT 2F - Topware Network Operating System - GET VERSION
  7054.     AX = FF01h
  7055. Return: AX = version
  7056. SeeAlso: AX=FF00h,AX=FF02h
  7057. --------N-2FFF02-----------------------------
  7058. INT 2F - TopWare Network OS v5.10+ - GET TopNet VERSION STRING
  7059.     AX = FF02h
  7060. Return: ES:BX -> version string
  7061. SeeAlso: AX=FF00h,AX=FF01h
  7062. --------N-2FFF10-----------------------------
  7063. INT 2F - TopWare Network OS v5.10+ - TopTerm - INSTALLATION CHECK
  7064.     AX = FF10h
  7065. Return: AL = status (00h not installed, 01h installed)
  7066. SeeAlso: AX=FF00h,AX=FF11h,AX=FF12h,AX=FF13h
  7067. --------N-2FFF11-----------------------------
  7068. INT 2F - TopWare Network OS v5.10+ - TopTerm - ENABLE KEYBOARD SERVICE
  7069.     AX = FF11h
  7070. Note:    this function is only available on workstations, not on the server
  7071. SeeAlso: AX=FF10h,AX=FF12h
  7072. --------N-2FFF12-----------------------------
  7073. INT 2F - TopWare Network OS v5.10+ - TopTerm - DISABLE KEYBOARD SERVICE
  7074.     AX = FF12h
  7075. Note:    this function is only available on workstations, not on the server
  7076. SeeAlso: AX=FF10h,AX=FF11h
  7077. --------N-2FFF13-----------------------------
  7078. INT 2F - TopWare Network OS v5.10+ - TopTerm - SET INSTALLATION FLAG
  7079.     AX = FF13h
  7080.     CL = new state (00h off, 01h on)
  7081. SeeAlso: AX=FF10h
  7082. --------N-2FFF14-----------------------------
  7083. INT 2F - TopWare Network OS v5.10+ - START BACKGROUND RECEIVE VIDEO DATA
  7084.     AX = FF14h
  7085. Note:    this function is only available on workstations, not on the server
  7086. SeeAlso: AX=FF10h,AX=FF15h
  7087. --------N-2FFF15-----------------------------
  7088. INT 2F - TopWare Network OS v5.10+ - END BACKGROUND RECEIVE VIDEO DATA
  7089.     AX = FF15h
  7090. Note:    this function is only available on workstations, not on the server
  7091. SeeAlso: AX=FF10h,AX=FF14h
  7092. --------N-2FFF16-----------------------------
  7093. INT 2F - TopWare Network OS v5.10+ - SET CONTROL NUMBER OF "SHOW" SCREEN
  7094.     AX = FF16h
  7095.     BL = which to set (00h TopShow, FFh TopTerm)
  7096.     CX = destination screen
  7097.         0000h all stations
  7098.         0000h-00FFh (TopTerm only) send to group CL
  7099.         8001h-80FEh send to station CL
  7100. SeeAlso: AX=FF18h
  7101. --------N-2FFF18-----------------------------
  7102. INT 2F - TopWare Network OS v5.10+ - SEND FULL SCREEN OF DATA FOR TopShow
  7103.     AX = FF18h
  7104. SeeAlso: AX=FF00h,AX=FF16h,AX=FF27h
  7105. --------N-2FFF23-----------------------------
  7106. INT 2F - TopWare Network OS v5.10+ - CLOSE SPOOL FILES AND START PRINTING
  7107.     AX = FF23h
  7108. SeeAlso: AX=FF00h
  7109. --------N-2FFF27-----------------------------
  7110. INT 2F - TopWare Network OS v5.10+ - GET "SHOW" TYPE
  7111.     AX = FF27h
  7112. Return: AL = type (00h complete version, 01h simple version)
  7113.     BL = "show" functions flag (00h disabled, 01h enabled)
  7114. SeeAlso: AX=FF16h,AX=FF18h
  7115. --------D-30---------------------------------
  7116. INT 30 - (NOT A VECTOR!) - DOS 1+ - FAR JMP instruction for CP/M-style calls
  7117.    the CALL 5 entry point does a FAR jump to here
  7118. Note:    under DOS 2+, the instruction at PSP:0005 points two bytes too low in
  7119.       memory
  7120. SeeAlso: INT 21/AH=26h
  7121. --------V-30---------------------------------
  7122. INT 30 - QRIP/TSR - USED BY GRAPHICS LIBRARY
  7123. Program: QRIP/TSR is a shareware TSR by Shane Hathaway implementing the Remote
  7124.       Imaging Protocol (RIP, RIPscrip) used by several BBS systems to
  7125.       provide a graphical user interface
  7126. SeeAlso: INT 2F/AX=ACF0h
  7127. --------W-30---------------------------------
  7128. INT 30 P - MS Windows 3.1+ - PROTECTED-MODE CALLBACK
  7129. SeeAlso: INT 20"Windows"
  7130. --------D-31---------------------------------
  7131. INT 31 - overwritten by CP/M jump instruction in INT 30
  7132. --------v-31---------------------------------
  7133. INT 31 - VIRUS - "Vacsina" series - INSTALLATION CHECK (NOT A VECTOR!)
  7134. Note:    if one of the Vacsina viruses is resident, the low byte of this
  7135.       interrupt still contains the last byte of the INT 30 CP/M JMP
  7136.       instruction, but the remaining three bytes are 7Fh 39h followed
  7137.       by the Vacsina version number
  7138. SeeAlso: INT 21/AX=FFFFh"VIRUS",INT 32"VIRUS"
  7139. --------E-310000-----------------------------
  7140. INT 31 P - DPMI 0.9+ - ALLOCATE LDT DESCRIPTORS
  7141.     AX = 0000h
  7142.     CX = number of descriptors to allocate
  7143. Return: CF clear if successful
  7144.         AX = base selector
  7145.     CF set on error
  7146.         AX = error code (DPMI 1.0+) (see #2775)
  7147. Notes:    DPMI is the DOS Protected-Mode Interface
  7148.     the base and limit of the returned descriptors will be 0, and the type
  7149.       will be "data"
  7150.     add the value returned by INT 31/AX=0003h to move to subsequent
  7151.       descriptors if multiple descriptors were allocated
  7152.     not supported by MS Windows 3.0 in Standard mode
  7153. SeeAlso: AX=0001h,AX=000Dh,INT 21/AX=3501h
  7154.  
  7155. (Table 2775)
  7156. Values for DPMI 1.0 error code:
  7157.  0000h-7FFFh DOS error passed through by DPMI
  7158.  8001h    unsupported function
  7159.  8002h    object in wrong state for function
  7160.  8003h    system integrity would be endangered
  7161.  8004h    deadlock detected
  7162.  8005h    pending serialization request cancelled
  7163.  8010h    out of DPMI internal resources
  7164.  8011h    descriptor unavailable
  7165.  8012h    linear memory unavailable
  7166.  8013h    physical memory unavailable
  7167.  8014h    backing store unavailable
  7168.  8015h    callback unavailable
  7169.  8016h    handle unavailable
  7170.  8017h    maximum lock count exceeded
  7171.  8018h    shared memory already serialized exclusively by another
  7172.  8019h    shared memory already serialized shared by another client
  7173.  8021h    invalid value for numeric or flag parameter
  7174.  8022h    invalid segment selector
  7175.  8023h    invalid handle
  7176.  8024h    invalid callback
  7177.  8025h    invalid linear address
  7178.  8026h    request not supported by hardware
  7179. --------E-310001-----------------------------
  7180. INT 31 P - DPMI 0.9+ - FREE LDT DESCRIPTOR
  7181.     AX = 0001h
  7182.     BX = selector to free
  7183. Return: CF clear if successful
  7184.     CF set on error
  7185.         AX = error code (DPMI 1.0+) (8022h) (see #2775)
  7186. Notes:    only one descriptor is freed per call
  7187.     the program's initial CS, DS, and SS descriptors may be freed
  7188.     (DPMI 1.0+) any segment registers containing the freed selector are
  7189.       set to 0000h
  7190.     not supported by MS Windows 3.0 in Standard mode
  7191. SeeAlso: AX=0000h,AX=000Ah,AX=000Dh,INT 21/AX=3502h
  7192. --------E-310002-----------------------------
  7193. INT 31 P - DPMI 0.9+ - SEGMENT TO DESCRIPTOR
  7194.     AX = 0002h
  7195.     BX = real mode segment
  7196. Return: CF clear if successful
  7197.         AX = selector corresponding to real mode segment (64K limit)
  7198.     CF set on error
  7199.         AX = error code (DPMI 1.0+) (8011h) (see #2775)
  7200. Notes:    multiple calls for the same real mode segment return the same selector
  7201.     the returned descriptor can never be modified or freed
  7202.     not supported by MS Windows 3.0 in Standard mode
  7203. --------E-310003-----------------------------
  7204. INT 31 P - DPMI 0.9+ - GET NEXT SELECTOR INCREMENT VALUE
  7205.     AX = 0003h
  7206. Return: CF clear
  7207.         AX = value to add to get next sequential selector
  7208. Notes:    the increment will be a power of two
  7209.     not supported by MS Windows 3.0 in Standard mode
  7210. SeeAlso: AX=0000h
  7211. --------E-310004-----------------------------
  7212. INT 31 P - DPMI 0.9+ - LOCK SELECTOR
  7213.     AX = 0004h
  7214.     BX = selector to lock (prevent paging)
  7215. Return: ???
  7216. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  7217.       specification, this function is called by MS Windows TASKMAN,
  7218.       PROGMAN, and KERNEL
  7219. SeeAlso: AX=0005h,AX=0600h
  7220. --------E-310005-----------------------------
  7221. INT 31 P - DPMI 0.9+ - UNLOCK SELECTOR
  7222.     AX = 0005h
  7223.     BX = selector to unlock (permit paging)
  7224. Return: ???
  7225. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  7226.       specification, this function is called by MS Windows TASKMAN,
  7227.       PROGMAN, and KERNEL
  7228. SeeAlso: AX=0004h,AX=0601h
  7229. --------E-310006-----------------------------
  7230. INT 31 P - DPMI 0.9+ - GET SEGMENT BASE ADDRESS
  7231.     AX = 0006h
  7232.     BX = selector
  7233. Return: CF clear if successful
  7234.         CX:DX = linear base address of segment
  7235.     CF set on error
  7236.         AX = error code (DPMI 1.0+) (8022h) (see #2775)
  7237. Note:    not supported by MS Windows 3.0 in Standard mode
  7238. SeeAlso: AX=0007h,INT 21/AX=3504h
  7239. --------E-310007-----------------------------
  7240. INT 31 P - DPMI 0.9+ - SET SEGMENT BASE ADDRESS
  7241.     AX = 0007h
  7242.     BX = selector
  7243.     CX:DX = linear base address
  7244. Return: CF clear if successful
  7245.     CF set on error
  7246.         AX = error code (DPMI 1.0+) (8022h,8025h) (see #2775)
  7247. Notes:    only modify descriptors allocated with INT 31/AX=0000h
  7248.     only the low 24 bits of the address will be used by 16-bit DPMI
  7249.       implementations even on a 386 or higher
  7250.     DPMI 1.0+ automatically reloads any segment registers containing the
  7251.       selector being modified
  7252.     not supported by MS Windows 3.0 in Standard mode
  7253. SeeAlso: AX=0006h,AX=0008h,AX=0009h,AX=000Ch,INT 21/AX=3503h
  7254. SeeAlso: INT 21/AH=E9h"OS/286",INT 2C/AX=0002h
  7255. --------E-310008-----------------------------
  7256. INT 31 P - DPMI 0.9+ - SET SEGMENT LIMIT
  7257.     AX = 0008h
  7258.     BX = selector
  7259.     CX:DX = segment limit
  7260. Return: CF clear if successful
  7261.     CF set on error
  7262.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see #2775)
  7263. Notes:    CX must be zero for 16-bit DPMI implementations
  7264.     limits greater than 1MB must be page aligned (low 12 bits set)
  7265.     only modify descriptors allocated with INT 31/AX=0000h
  7266.     DPMI 1.0+ automatically reloads any segment registers containing the
  7267.       selector being modified
  7268.     not supported by MS Windows 3.0 in Standard mode
  7269. SeeAlso: AX=0007h,AX=0009h,AX=000Ch,INT 21/AX=3505h,INT 21/AH=E9h"OS/286"
  7270. SeeAlso: INT 2C/AX=0003h,#0420 at INT 15/AH=89h
  7271. --------E-310009-----------------------------
  7272. INT 31 P - DPMI 0.9+ - SET DESCRIPTOR ACCESS RIGHTS
  7273.     AX = 0009h
  7274.     BX = selector
  7275.     CL = access rights/type byte (see #0421 at INT 15/AH=89h)
  7276.     CH = 80386 extended rights/type byte (see #0422 at INT 15/AH=89h)
  7277.         (32-bit DPMI implementations only)
  7278. Return: CF clear if successful
  7279.     CF set on error
  7280.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see #2775)
  7281. Notes:    if the Present bit is clear, CL bits 0-3 may have any value
  7282.     DPMI 1.0+ automatically reloads any segment registers containing the
  7283.       selector being modified
  7284.     not supported by MS Windows 3.0 in Standard mode
  7285. SeeAlso: AX=0007h,AX=0008h,AX=000Ch,INT 21/AX=2514h,INT 2C/AX=0004h
  7286. SeeAlso: INT 2C/AX=0005h
  7287. --------E-31000A-----------------------------
  7288. INT 31 P - DPMI 0.9+ - CREATE ALIAS DESCRIPTOR
  7289.     AX = 000Ah
  7290.     BX = selector
  7291. Return: CF clear if successful
  7292.         AX = new data selector
  7293.     CF set on error
  7294.         AX = error code (DPMI 1.0+) (8011h,8022h) (see #2775)
  7295. Notes:    fails if selector in BX is not a code segment or is invalid
  7296.     use INT 31/AX=0001h to free new selector
  7297.     future changes to the original selector will not be reflected in the
  7298.       returned alias selector
  7299.     not supported by MS Windows 3.0 in Standard mode
  7300. SeeAlso: AX=0001h
  7301. --------E-31000B-----------------------------
  7302. INT 31 P - DPMI 0.9+ - GET DESCRIPTOR
  7303.     AX = 000Bh
  7304.     BX = LDT selector
  7305.     ES:(E)DI -> 8-byte buffer for copy of descriptor
  7306. Return: CF clear if successful
  7307.         buffer filled
  7308.     CF set on error
  7309.         AX = error code (DPMI 1.0+) (8022h) (see #2775)
  7310. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  7311.     not supported by MS Windows 3.0 in Standard mode
  7312. SeeAlso: AX=000Ch
  7313. --------E-31000C-----------------------------
  7314. INT 31 P - DPMI 0.9+ - SET DESCRIPTOR
  7315.     AX = 000Ch
  7316.     BX = LDT selector
  7317.     ES:(E)DI -> 8-byte buffer containing descriptor
  7318. Return: CF clear if successful
  7319.     CF set on error
  7320.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see #2775)
  7321. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  7322.     only modify descriptors allocated with INT 31/AX=0000h
  7323.     DPMI 1.0+ automatically reloads any segment registers containing the
  7324.       selector being modified
  7325.     not supported by MS Windows 3.0 in Standard mode
  7326. SeeAlso: AX=000Bh
  7327. --------E-31000D-----------------------------
  7328. INT 31 P - DPMI 0.9+ - ALLOCATE SPECIFIC LDT DESCRIPTOR
  7329.     AX = 000Dh
  7330.     BX = LDT selector
  7331. Return: CF clear if successful
  7332.         descriptor allocated
  7333.     CF set on error
  7334.         AX = error code (DPMI 1.0+) (8011h,8022h) (see #2775)
  7335. Notes:    free descriptor with INT 31/AX=0001h
  7336.     the first 16 descriptors (04h-7Ch) are reserved for this function, but
  7337.       some may already be in use by other applications under DPMI 0.9;
  7338.       DPMI 1.0 guarantees 16 descriptors per client
  7339.     not supported by MS Windows 3.0 in Standard mode
  7340. SeeAlso: AX=0000h,AX=0001h
  7341. --------E-31000E-----------------------------
  7342. INT 31 P - DPMI 1.0+ - GET MULTIPLE DESCRIPTORS
  7343.     AX = 000Eh
  7344.     CX = number of descriptors to copy
  7345.     ES:(E)DI -> descriptor buffer (see #2776)
  7346. Return: CF clear if successful
  7347.         descriptors copied
  7348.     CF set on error
  7349.         AX = error code (8022h) (see #2775)
  7350.         CX = number of descriptors successfully copied
  7351. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  7352.     if the function fails, the first CX descriptors are valid; the
  7353.       remainder are not modified
  7354. SeeAlso: AX=000Bh,AX=000Fh
  7355.  
  7356. Format of DPMI descriptor buffer entry (one per descriptor to get):
  7357. Offset    Size    Description    (Table 2776)
  7358.  00h    WORD    selector (set by client)
  7359.  02h    QWORD    descriptor (set by host)
  7360. --------E-31000F-----------------------------
  7361. INT 31 P - DPMI 1.0+ - SET MULTIPLE DESCRIPTORS
  7362.     AX = 000Fh
  7363.     CX = number of descriptors to copy
  7364.     ES:(E)DI -> descriptor buffer (see #2777)
  7365. Return: CF clear if successful
  7366.         descriptors copied
  7367.     CF set on error
  7368.         AX = error code (8021h,8022h,8025h) (see #2775)
  7369.         CX = number of descriptors successfully copied
  7370. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  7371.     if the function fails, the first CX descriptors are valid; the
  7372.       remainder are not modified
  7373.     DPMI 1.0+ automatically reloads any segment registers containing a
  7374.       selector being modified
  7375. SeeAlso: AX=000Ch,AX=000Eh
  7376.  
  7377. Format of DPMI descriptor buffer entry (one per descriptor to set):
  7378. Offset    Size    Description    (Table 2777)
  7379.  00h    WORD    selector
  7380.  02h    QWORD    descriptor
  7381. --------E-310100-----------------------------
  7382. INT 31 P - DPMI 0.9+ - ALLOCATE DOS MEMORY BLOCK
  7383.     AX = 0100h
  7384.     BX = number of paragraphs to allocate
  7385. Return: CF clear if successful
  7386.         AX = real mode segment of allocated block
  7387.         DX = first selector for allocated block
  7388.     CF set on error
  7389.         AX = DOS error code (07h,08h) (see #1332 at INT 21/AH=59h/BX=0000h)
  7390.         (DPMI 1.0+) DPMI error code (8011h) (see #2775)
  7391.         BX = size (in paragraphs) of largest available block
  7392. Notes:    multiple contiguous selectors are allocated for blocks of more than 64K
  7393.       if the caller is a 16-bit program
  7394.     never modify or deallocate returned descriptors
  7395.     not supported by MS Windows 3.0 in Standard mode
  7396. SeeAlso: AX=0101h,AX=0501h
  7397. --------E-310101-----------------------------
  7398. INT 31 P - DPMI 0.9+ - FREE DOS MEMORY BLOCK
  7399.     AX = 0101h
  7400.     DX = selector of block
  7401. Return: CF set if successful
  7402.     CF set on error
  7403.         AX = DOS error code (07h,09h) (see #1332 at INT 21/AH=59h/BX=0000h)
  7404. Notes:    all descriptors allocated for the block are automatically freed
  7405.     DPMI 1.0+ automatically zeros any segment registers containing a
  7406.       selector freed by this function
  7407.     not supported by MS Windows 3.0 in Standard mode
  7408. SeeAlso: AX=0100h,AX=0102h,AX=0502h
  7409. --------E-310102-----------------------------
  7410. INT 31 P - DPMI 0.9+ - RESIZE DOS MEMORY BLOCK
  7411.     AX = 0102h
  7412.     BX = new block size in paragraphs
  7413.     DX = selector of block
  7414. Return: CF clear if successful
  7415.     CF set on error
  7416.         AX = DOS error code (07h,08h,09h)
  7417.           (see #1332 at INT 21/AH=59h/BX=0000h)
  7418.         (DPMI 1.0+) DPMI error code (8011h,8022h) (see #2775)
  7419.         BX = maximum block size (in paragraphs) possible
  7420. Notes:    increasing the size of a block past a 64K boundary will fail if the
  7421.       next descriptor in the LDT is already in use
  7422.     shrinking a block past a 64K boundary will cause some selectors to be
  7423.       freed; DPMI 1.0+ automatically zeros any segment registers containing
  7424.       a selector freed by this function
  7425.     not supported by MS Windows 3.0 in Standard mode
  7426. SeeAlso: AX=0100h
  7427. --------E-310200-----------------------------
  7428. INT 31 P - DPMI 0.9+ - GET REAL MODE INTERRUPT VECTOR
  7429.     AX = 0200h
  7430.     BL = interrupt number
  7431. Return: CF clear
  7432.     CX:DX = segment:offset of real mode interrupt handler
  7433. Note:    the DPMI implementation is required to support all 256 vectors
  7434. SeeAlso: AX=0201h,AX=0204h,INT 21/AX=2503h
  7435. --------E-310201-----------------------------
  7436. INT 31 P - DPMI 0.9+ - SET REAL MODE INTERRUPT VECTOR
  7437.     AX = 0201h
  7438.     BL = interrupt number
  7439.     CX:DX = segment:offset of real mode handler
  7440. Return: CF clear
  7441. Note:    all memory that may be touched by a hardware interrupt handler must be
  7442.       locked down with INT 31/AX=0600h
  7443. SeeAlso: AX=0200h,AX=0205h,AX=0600h,INT 21/AX=2505h
  7444. --------E-310202-----------------------------
  7445. INT 31 P - DPMI 0.9+ - GET PROCESSOR EXCEPTION HANDLER VECTOR
  7446.     AX = 0202h
  7447.     BL = exception number (00h-1Fh)
  7448. Return: CF clear if successful
  7449.         CX:(E)DX = selector:offset of handler
  7450.     CF set on error
  7451.         AX = error code (DPMI 1.0+) (8021h) (see #2775)
  7452. Notes:    16-bit programs receive the pointer in CX:DX, 32-bit programs in CX:EDX
  7453.     DPMI 1.0+ supports this function only for backward compatibility; use
  7454.        AX=0210h or AX=0211h instead
  7455.     not supported by MS Windows 3.0 in Standard mode
  7456. SeeAlso: AX=0203h,AX=0210h,AX=0211h,INT 2F/AX=FB42h/BX=0021h
  7457. --------E-310203-----------------------------
  7458. INT 31 P - DPMI 0.9+ - SET PROCESSOR EXCEPTION HANDLER VECTOR
  7459.     AX = 0203h
  7460.     BL = exception number (00h-1Fh)
  7461.     CX:(E)DX = selector:offset of handler
  7462. Return: CF clear if successful
  7463.     CF set on error
  7464.         AX = error code (DPMI 1.0+) (8021h,8022h) (see #2775)
  7465. Notes:    32-bit programs must supply an offset in EDX and use a 32-bit interrupt
  7466.       stack frame on chaining to the next exception handler
  7467.     the handler should return using a FAR return
  7468.     all fault stack frames contain an error code, but it is only valid for
  7469.       exceptions 08h and 0Ah-0Eh
  7470.     handlers will only be called if the exception occurs in protected mode,
  7471.       and the DPMI host does not transparently handle the exception
  7472.     the handler may change certain values on the stack frame
  7473.       (see #2778,#2779)
  7474.     DPMI 1.0+ supports this function only for backward compatibility; use
  7475.        AX=0212h or AX=0213h instead
  7476.     not supported by MS Windows 3.0 in Standard mode
  7477. SeeAlso: AX=0202h,AX=0212h,AX=0213h,INT 2F/AX=FB42h/BX=0022h
  7478.  
  7479. Format of stack frame for 16-bit programs: (offset from SS:SP)
  7480. Offset    Size    Description    (Table 2778)
  7481.  00h    DWORD    return CS:IP (do not change)
  7482.  04h    WORD    error code
  7483.  06h    DWORD    CS:IP of exception
  7484.  0Ah    WORD    flags
  7485.  0Ch    DWORD    SS:SP
  7486.  
  7487. Format of stack frame for 32-bit programs: (offset from SS:ESP)
  7488. Offset    Size    Description    (Table 2779)
  7489.  00h    DWORD    return EIP (do not change)
  7490.  04h    WORD    return CS selector (do not change)
  7491.  06h    WORD    reserved (do not change)
  7492.  08h    DWORD    error code
  7493.  0Ch    DWORD    EIP of exception
  7494.  10h    WORD    CS selector of exception
  7495.  12h    WORD    reserved (do not change)
  7496.  14h    DWORD    EFLAGS
  7497.  18h    DWORD    ESP
  7498.  1Ch    WORD    SS
  7499.  1Eh    WORD    reserved (do not change)
  7500. --------E-310204-----------------------------
  7501. INT 31 P - DPMI 0.9+ - GET PROTECTED MODE INTERRUPT VECTOR
  7502.     AX = 0204h
  7503.     BL = interrupt number
  7504. Return: CF clear
  7505.     CX:(E)DX = selector:offset of handler
  7506. Notes:    16-bit programs use CX:DX, 32-bit programs use CX:EDX
  7507.     DPMI implementations are required to support all 256 vectors
  7508.     not supported by MS Windows 3.0 in Standard mode
  7509. SeeAlso: AX=0200h,AX=0205h,INT 21/AX=2502h,INT 2C/AX=0006h
  7510. SeeAlso: INT 2F/AX=FB42h/BX=0024h
  7511. --------E-310205-----------------------------
  7512. INT 31 P - DPMI 0.9+ - SET PROTECTED MODE INTERRUPT VECTOR
  7513.     AX = 0205h
  7514.     BL = interrupt number
  7515.     CX:(E)DX = selector:offset of handler
  7516. Return: CF clear if successful
  7517.     CF set on error
  7518.         AX = error code (DPMI 1.0+) (8022h) (see #2775)
  7519. Notes:    16-bit programs use CX:DX, 32-bit programs use CX:EDX
  7520.     32-bit programs must use a 32-bit interrupt stack frame when chaining
  7521.       to the next handler
  7522.     DPMI implementations are required to support all 256 vectors
  7523.     hardware interrupts are reflected to the virtual machine's primary
  7524.       client, software interrupts to the current client
  7525.     not supported by MS Windows 3.0 in Standard mode
  7526. SeeAlso: AX=0201h,AX=0204h,INT 21/AX=2504h,INT 2C/AX=0007h
  7527. SeeAlso: INT 2F/AX=FB42h/BX=0025h
  7528. --------E-310210-----------------------------
  7529. INT 31 P - DPMI 1.0+ - GET PROTECTED MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  7530.     AX = 0210h
  7531.     BL = exception number (00h-1Fh)
  7532. Return: CF clear if successful
  7533.         CX:(E)DX = selector:offset of exception handler
  7534.     CF set on error
  7535.         AX = error code (8021h) (see #2775)
  7536. Note:    DPMI host reflects exception to current client's handler
  7537. SeeAlso: AX=0202h,AX=0211h,AX=0212h
  7538. --------E-310211-----------------------------
  7539. INT 31 P - DPMI 1.0+ - GET REAL MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  7540.     AX = 0211h
  7541.     BL = exception number (00h-1Fh)
  7542. Return: CF clear if successful
  7543.         CX:(E)DX = selector:offset of exception handler
  7544.     CF set on error
  7545.         AX = error code (8021h) (see #2775)
  7546. Notes:    returns address of protected-mode handler for real-mode exception
  7547.     DPMI host performs a switch to protected mode, reflects the exception
  7548.       to the virtual machine's primary client, and returns to real mode
  7549.       on the handler's completion
  7550. SeeAlso: AX=0202h,AX=0210h,AX=0213h
  7551. --------E-310212-----------------------------
  7552. INT 31 P - DPMI 1.0+ - SET PROTECTED MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  7553.     AX = 0212h
  7554.     BL = exception or fault number (00h-1Fh)
  7555.     CX:(E)DX = exception handler selector:offset
  7556. Return: CF clear if successful
  7557.     CF set on error
  7558.         AX = error code (8021h,8022h) (see #2775)
  7559. Note:    DPMI host sends exception to current client's handler
  7560. SeeAlso: AX=0203h,AX=0210h,AX=0213h
  7561. --------E-310213-----------------------------
  7562. INT 31 P - DPMI 1.0+ - SET REAL MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  7563.     AX = 0213h
  7564.     BL = exception or fault number (00h-1Fh)
  7565.     CX:(E)DX = exception handler selector:offset
  7566. Return: CF clear if successful
  7567.     CF set on error
  7568.         AX = error code (8021h,8022h) (see #2775)
  7569. Notes:    specifies address of protected-mode handler for real-mode exception
  7570.     DPMI host performs a switch to protected mode, reflects the exception
  7571.       to the virtual machine's primary client, and returns to real mode
  7572.       on the handler's completion
  7573. SeeAlso: AX=0203h,AX=0211h,AX=0212h
  7574. --------E-310300-----------------------------
  7575. INT 31 P - DPMI 0.9+ - SIMULATE REAL MODE INTERRUPT
  7576.     AX = 0300h
  7577.     BL = interrupt number
  7578.     BH = flags
  7579.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  7580.             reserved, must be 0 (DPMI 1.0+)
  7581.         others: reserved, must be 0
  7582.     CX = number of words to copy from protected mode to real mode stack
  7583.     ES:(E)DI = selector:offset of real mode call structure (see #2780)
  7584. Return: CF clear if successful
  7585.         real mode call structure modified (all fields except SS:SP, CS:IP
  7586.           filled with return values from real mode interrupt)
  7587.     CF set on error
  7588.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see #2775)
  7589.     protected mode stack unchanged
  7590. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  7591.     CS:IP in the real mode call structure is ignored for this call,
  7592.       instead, the indicated interrupt vector is used for the address
  7593.     the flags in the call structure are pushed on the real mode stack to
  7594.       form an interrupt stack frame, and the trace and interrupt flags are
  7595.       clear on entry to the handler
  7596.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  7597.     the real mode handler must return with the stack in the same state as
  7598.       it was on being called
  7599. SeeAlso: AX=0302h,AX=FF01h,INT 21/AX=2511h,INT 21/AH=E3h"OS/286"
  7600. SeeAlso: INT 2C/AX=0026h,INT 2F/AX=FB42h/BX=000Dh
  7601.  
  7602. Format of DPMI real mode call structure:
  7603. Offset    Size    Description    (Table 2780)
  7604.  00h    DWORD    EDI
  7605.  04h    DWORD    ESI
  7606.  08h    DWORD    EBP
  7607.  0Ch    DWORD    reserved (00h)
  7608.  10h    DWORD    EBX
  7609.  14h    DWORD    EDX
  7610.  18h    DWORD    ECX
  7611.  1Ch    DWORD    EAX
  7612.  20h    WORD    flags
  7613.  22h    WORD    ES
  7614.  24h    WORD    DS
  7615.  26h    WORD    FS
  7616.  28h    WORD    GS
  7617.  2Ah    WORD    IP
  7618.  2Ch    WORD    CS
  7619.  2Eh    WORD    SP
  7620.  30h    WORD    SS
  7621. --------E-310301-----------------------------
  7622. INT 31 P - DPMI 0.9+ - CALL REAL MODE PROCEDURE WITH FAR RETURN FRAME
  7623.     AX = 0301h
  7624.     BH = flags
  7625.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  7626.             reserved, must be 0 (DPMI 1.0+)
  7627.         others: reserved must be 0
  7628.     CX = number of words to copy from protected mode to real mode stack
  7629.     ES:(E)DI = selector:offset of real mode call structure
  7630.           (see #2780 at INT 31/AX=0300h)
  7631. Return: CF clear if successful
  7632.         real mode call structure modified (all fields except SS:SP, CS:IP
  7633.           filled with return values from real mode interrupt)
  7634.     CF set on error
  7635.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see #2775)
  7636.     protected mode stack unchanged
  7637. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  7638.     the real mode procedure must exit with a FAR return
  7639.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  7640.     the real mode handler must return with the stack in the same state as
  7641.       it was on being called
  7642. SeeAlso: AX=0300h,AX=0302h,AX=FF02h,INT 21/AX=250Eh,INT 21/AH=E1h"OS/286"
  7643. SeeAlso: INT 2C/AX=0025h
  7644. --------E-310302-----------------------------
  7645. INT 31 P - DPMI 0.9+ - CALL REAL MODE PROCEDURE WITH IRET FRAME
  7646.     AX = 0302h
  7647.     BH = flags
  7648.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  7649.             reserved, must be 0 (DPMI 1.0+)
  7650.         others: reserved, must be 0
  7651.     CX = number of words to copy from protected mode to real mode stack
  7652.     ES:(E)DI = selector:offset of real mode call structure
  7653.           (see #2780 at INT 31/AX=0300h)
  7654. Return: CF clear if successful
  7655.         real mode call structure modified (all fields except SS:SP, CS:IP
  7656.           filled with return values from real mode interrupt)
  7657.     CF set on error
  7658.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see #2775)
  7659.     protected mode stack unchanged
  7660. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  7661.     the flags in the call structure are pushed on the real mode stack to
  7662.       form an interrupt stack frame, and the trace and interrupt flags are
  7663.       clear on entry to the handler
  7664.     the real mode procedure must exit with an IRET
  7665.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  7666.     the real mode handler must return with the stack in the same state as
  7667.       it was on being called
  7668. SeeAlso: AX=0300h
  7669. --------E-310303-----------------------------
  7670. INT 31 P - DPMI 0.9+ - ALLOCATE REAL MODE CALLBACK ADDRESS
  7671.     AX = 0303h
  7672.     DS:(E)SI = selector:offset of procedure to call
  7673.     ES:(E)DI = selector:offset of real mode call structure (see #2780)
  7674. Return: CF clear if successful
  7675.         CX:DX = segment:offset of real mode call address (see #2781)
  7676.     CF set on error
  7677.         AX = error code (DPMI 1.0+) (8015h) (see #2775)
  7678. Notes:    the real mode call structure is static, causing reentrancy problems;
  7679.       its contents are only valid at the time of a callback
  7680.     the called procedure must modify the real mode CS:IP before returning
  7681.     values are returned to real mode by modifying the real mode call struc
  7682.     DPMI hosts must provide at least 16 callbacks per client
  7683.     the limited DPMI host built into Phar Lap's 286|DOS-Extender v2.5 does
  7684.       not support this function
  7685. SeeAlso: AX=0304h,AX=0C00h
  7686.  
  7687. (Table 2781)
  7688. Values DPMI real-mode callback procedure is called with:
  7689.     DS:(E)SI = selector:offset of real mode SS:SP
  7690.     ES:(E)DI = selector:offset of real mode call structure
  7691.     SS:(E)SP = locked protected mode API stack
  7692.     interrupts disabled
  7693. Return: (with IRET)
  7694.     ES:(E)DI = selector:offset of real mode call structure to restore
  7695. --------E-310304-----------------------------
  7696. INT 31 P - DPMI 0.9+ - FREE REAL MODE CALLBACK ADDRESS
  7697.     AX = 0304h
  7698.     CX:DX = real mode callback address
  7699. Return: CF clear if successful
  7700.     CF set on error
  7701.         AX = error code (DPMI 1.0+) (8024h) (see #2775)
  7702. Note:    the limited DPMI host built into Phar Lap's 286|DOS-Extender v2.5 does
  7703.       not support this function
  7704. SeeAlso: AX=0303h
  7705. --------E-310305-----------------------------
  7706. INT 31 P - DPMI 0.9+ - GET STATE SAVE/RESTORE ADDRESSES
  7707.     AX = 0305h
  7708. Return: CF clear
  7709.     AX = size in bytes of state buffer
  7710.     BX:CX = real mode address of procedure to save/restore state
  7711.     SI:(E)DI = protected mode procedure to save/restore state (see #2782)
  7712. Notes:    the buffer size will be zero if it is not necessary to preserve state
  7713.     16-bit programs should call SI:DI, 32-bit programs should call SI:EDI
  7714.     this function is only needed if using the raw mode switch service
  7715. SeeAlso: AX=0306h
  7716.  
  7717. (Table 2782)
  7718. Call DPMI state-save procedures with:
  7719.     AL = direction
  7720.         00h save state
  7721.         01h restore state
  7722.     ES:(E)DI -> state buffer
  7723. Return: all registers preserved
  7724. --------E-310306-----------------------------
  7725. INT 31 P - DPMI 0.9+ - GET RAW MODE SWITCH ADDRESSES
  7726.     AX = 0306h
  7727. Return: CF clear
  7728.     BX:CX -> procedure to switch from real to protected mode (see #2783)
  7729.     SI:(E)DI -> procedure to switch from protected to real mode
  7730. Notes:    16-bit programs should jump to SI:DI, 32-bit programs should use SI:EDI
  7731.     the caller must save and restore the state of the task with AX=0305h
  7732.     not supported by MS Windows 3.0 in Standard mode
  7733. SeeAlso: AX=0305h
  7734.  
  7735. (Table 2783)
  7736. Values to JUMP at mode-switch procedures with:
  7737.     AX = new DS
  7738.     CX = new ES
  7739.     DX = new SS
  7740.     (E)BX = new (E)SP
  7741.     SI:(E)DI = new CS:(E)IP
  7742. Notes:    BP/EBP is preserved across the call, but AX/EAX, BX/EBX, CX/ECX,
  7743.       DX/EDX, SI/ESI, and DI/EDI will be undefined; FS and GS will be 0000h
  7744.     interrupts will stay disabled during the entire mode switch if they
  7745.       are disabled on entry to the mode-switch procedure
  7746. --------E-310400-----------------------------
  7747. INT 31 P - DPMI 0.9+ - GET DPMI VERSION
  7748.     AX = 0400h
  7749. Return: CF clear
  7750.     AH = major version of DPMI spec supported
  7751.     AL = two-digit minor version of DPMI spec supported
  7752.     BX = DPMI host flags (see #2784)
  7753.     CL = processor type (02h=80286, 03h=80386, 04h=80486)
  7754.     DH = curr value of virtual master interrupt controller base interrupt
  7755.     DL = curr value of virtual slave interrupt controller base interrupt
  7756. BUG:    Windows NT versions from the March 1993 beta to at least the Final
  7757.       release with fixes to CSD002 report version 0090h (0.144); this has
  7758.       reportedly been corrected in the Windows NT 3.5 beta
  7759. SeeAlso: AX=0401h,INT 21/AX=250Ch,INT 2F/AX=1687h,INT 4B/AX=8102h/DX=0000h
  7760. SeeAlso: INT 67/AX=DE0Ah
  7761.  
  7762. Bitfields for DPMI host flags:
  7763. Bit(s)    Description    (Table 2784)
  7764.  0    running under an 80386 (32-bit) implementation
  7765.  1    processor returns to real mode for reflected interrupts instead of V86
  7766.       mode
  7767.  2    virtual memory supported
  7768.  3    reserved (undefined)
  7769.  4-15    reserved (zero)
  7770. --------E-310401-----------------------------
  7771. INT 31 P - DPMI 1.0+ - GET DPMI CAPABILITIES
  7772.     AX = 0401h
  7773.     ES:(E)DI -> 128-byte buffer for host description (see #2785)
  7774. Return: CF clear if successful
  7775.         AX = capabilities (see #2786)
  7776.         CX = reserved (00h)
  7777.         DX = reserved (00h)
  7778.         buffer filled
  7779.     CF set on error (DPMI 0.9 only)
  7780. SeeAlso: AX=0400h
  7781.  
  7782. Format of DPMI host description:
  7783. Offset    Size    Description    (Table 2785)
  7784.  00h    BYTE    host major version number
  7785.  01h    BYTE    host minor version number
  7786.  02h 126 BYTEs    ASCIZ host vendor name
  7787.  
  7788. Bitfields for DPMI capabilities:
  7789. Bit(s)    Description    (Table 2786)
  7790.  0    paged accessed/dirty supported (see AX=0506h,AX=0507h)
  7791.  1    exceptions restartability supported
  7792.  2    device mapping supported (see AX=0508h)
  7793.  3    conventional memory mapping supported (see AX=0509h)
  7794.  4    demand zero-fill supported
  7795.  5    write-protect client capability supported
  7796.  6    write-protect host capability supported
  7797.  7-15    reserved
  7798. --------E-310500-----------------------------
  7799. INT 31 P - DPMI 0.9+ - GET FREE MEMORY INFORMATION
  7800.     AX = 0500h
  7801.     ES:(E)DI -> buffer for memory information (see #2787)
  7802. Return: CF clear
  7803. Notes:    16-bit programs use ES:DI, 32-bit programs use ES:EDI
  7804.     this function must be considered advisory because other applications
  7805.       may affect the results at any time after the call
  7806.     fields not supported by the DPMI implementation are filled with
  7807.       FFFFFFFFh
  7808.     DPMI 1.0+ supports this function solely for backward compatibility; use
  7809.       AX=050Bh instead
  7810.     the limited DPMI host built into Phar Lap's 286|DOS-Extender v2.5 only
  7811.       returns the first field in the memory information record
  7812. SeeAlso: AX=0501h,AX=050Bh,AX=0604h
  7813.  
  7814. Format of DPMI memory information:
  7815. Offset    Size    Description    (Table 2787)
  7816.  00h    DWORD    largest available block in bytes
  7817.  04h    DWORD    maximum unlocked page allocation
  7818.  08h    DWORD    maximum locked page allocation
  7819.  0Ch    DWORD    total linear address space in pages
  7820.  10h    DWORD    total unlocked pages
  7821.  14h    DWORD    free pages
  7822.  18h    DWORD    total physical pages
  7823.  1Ch    DWORD    free linear address space in pages
  7824.  20h    DWORD    size of paging file/partition in pages
  7825.  24h 12 BYTEs    reserved
  7826. --------E-310501-----------------------------
  7827. INT 31 P - DPMI 0.9+ - ALLOCATE MEMORY BLOCK
  7828.     AX = 0501h
  7829.     BX:CX = size in bytes
  7830. Return: CF clear if successful
  7831.         BX:CX = linear address of block
  7832.         SI:DI = memory block handle for resizing and freeing block
  7833.     CF set on error
  7834.         AX = error code (DPMI 1.0+) (8012h-8014h,8016h,8021h)(see #2775)
  7835. Notes:    no selectors are allocated
  7836.     the memory block is allocated unlocked (can be locked with AX=0600h)
  7837.     allocations are often page granular (see AX=0604h)
  7838.     under MS Windows 3.10 Enhanced mode with paging enabled, it is possible
  7839.       for this function to fail even if AX=0500h indicates that enough
  7840.       memory is available
  7841. SeeAlso: AX=0000h,AX=0100h,AX=0500h,AX=0502h,AX=0503h,AX=0504h,AX=0D00h
  7842. SeeAlso: INT 2F/AX=FB42h/BX=0002h
  7843. --------E-310502-----------------------------
  7844. INT 31 P - DPMI 0.9+ - FREE MEMORY BLOCK
  7845.     AX = 0502h
  7846.     SI:DI = handle of memory block
  7847. Return: CF clear if successful
  7848.     CF set on error
  7849.         AX = error code (DPMI 1.0+) (8023h) (see #2775)
  7850. Note:    any selectors allocated for the memory block must also be freed,
  7851.       preferably before freeing the memory block
  7852. SeeAlso: AX=0001h,AX=0101h,AX=0501h,AX=0D01h
  7853. --------E-310503-----------------------------
  7854. INT 31 P - DPMI 0.9+ - RESIZE MEMORY BLOCK
  7855.     AX = 0503h
  7856.     BX:CX = new size in bytes (nonzero)
  7857.     SI:DI = handle of memory block
  7858. Return: CF clear if successful
  7859.         BX:CX = new linear address
  7860.         SI:DI = new handle of memory block
  7861.     CF set on error
  7862.         AX = error code (DPMI 1.0+) (8012h-8014h,8016h,8021h,8023h)
  7863.         (see #2775)
  7864. Notes:    any selectors pointing at the block must be updated
  7865.     the previous memory block handle becomes invalid
  7866.     an error is returned if the new size is 0
  7867. SeeAlso: AX=0102h,AX=0501h,AX=0505h
  7868. --------E-310504-----------------------------
  7869. INT 31 P - DPMI 1.0+ - ALLOCATE LINEAR MEMORY BLOCK
  7870.     AX = 0504h
  7871.     EBX = page-aligned linear address of memory block (00000000h if any
  7872.           address is acceptable)
  7873.     ECX = size in bytes (nonzero)
  7874.     EDX = flags
  7875.         bit 0: set to create committed pages instead of uncommitted pages
  7876.         bits 1-31 reserved (0)
  7877. Return: CF clear if successful
  7878.         EBX = linear address of memory block
  7879.         ESI = memory block handle
  7880.     CF set on error
  7881.         AX = error code (8001h,8012h-8014h,8016h,8021h,8025h)(see #2775)
  7882. Note:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  7883. SeeAlso: AX=0501h,AX=0505h
  7884. --------E-310505-----------------------------
  7885. INT 31 P - DPMI 1.0+ - RESIZE LINEAR MEMORY BLOCK
  7886.     AX = 0505h
  7887.     ESI = memory block handle
  7888.     ECX = new size in bytes (nonzero)
  7889.     EDX = flags
  7890.         bit 0: create committed pages rather than uncommitted pages
  7891.         bit 1: segment descriptor update required
  7892.         ES:EBX -> buffer containing array of WORDs with selectors
  7893.         EDI = number of selectors in array
  7894.         bits 2-31 reserved (0)
  7895. Return: CF clear if successful
  7896.         EBX = new linear base address
  7897.         ESI = new memory block handle
  7898.     CF set on error
  7899.         AX = error code (8001h,8012h-8014h,8016h,8021h,8023h)(see #2775)
  7900. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  7901.     the old memory block handle becomes invalid
  7902.     if EDX bit 1 set and the block's base address is changed, DPMI updates
  7903.       all descriptors for selectors in the update buffer which fall within
  7904.       the memory block
  7905. SeeAlso: AX=0503h,AX=0504h
  7906. --------E-310506-----------------------------
  7907. INT 31 P - DPMI 1.0+ - GET PAGE ATTRIBUTES
  7908.     AX = 0506h
  7909.     ESI = memory block handle
  7910.     EBX = offset in memory block of first page
  7911.     ECX = number of pages
  7912.     ES:EDX -> array of WORDs to hold page attributes (see #2788)
  7913. Return: CF clear if successful
  7914.         buffer filled
  7915.     CF set on error
  7916.         AX = error code (8001h,8023h,8025h) (see #2775)
  7917. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  7918.     if EBX is not page-aligned, it will be rounded down
  7919. SeeAlso: AX=0504h,AX=0507h,INT 21/AX=251Dh,INT 21/AX=EB00h
  7920.  
  7921. Bitfields for DPMI page attribute word:
  7922. Bit(s)    Description    (Table 2788)
  7923.  0-2    page type
  7924.     000 uncommitted
  7925.     001 committed
  7926.     010 mapped (see AX=0508h,AX=0509h)
  7927.     other currently unused
  7928.  3    page is read/write rather than read-only
  7929.  4    accessed/dirty bits supplied in bits 5 and 6
  7930.  5    page has been accessed (only valid if bit 4 set)
  7931.  6    page has been written (only valid if bit 4 set)
  7932.  7-15    reserved (0)
  7933. --------E-310507-----------------------------
  7934. INT 31 P - DPMI 1.0+ - MODIFY PAGE ATTRIBUTES
  7935.     AX = 0507h
  7936.     ESI = memory block handle
  7937.     EBX = offset in memory block of first page
  7938.     ECX = number of pages
  7939.     ES:EDX -> array of WORDs with new page attributes (see #2788)
  7940. Return: CF clear if successful
  7941.     CF set on error
  7942.         AX = error code (8001h,8002h,8013h,8014h,8021h,8023h,8025h)
  7943.         (see #2775)
  7944.         ECX = number of pages which have been set
  7945. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  7946.     if EBX is not page-aligned, it will be rounded down
  7947. SeeAlso: AX=0504h,AX=0506h,INT 21/AX=251Eh
  7948. --------E-310508-----------------------------
  7949. INT 31 P - DPMI 1.0+ - MAP DEVICE IN MEMORY BLOCK
  7950.     AX = 0508h
  7951.     ESI = memory block handle
  7952.     EBX = page-aligned offset within memory block of page(s) to be mapped
  7953.     ECX = number of pages to map
  7954.     EDX = page-aligned physical address of device
  7955. Return: CF clear if successful
  7956.     CF set on error
  7957.         AX = error code (8001h,8003h,8023h,8025h) (see #2775)
  7958. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  7959.     support of this function is optional; hosts are also allowed to support
  7960.       the function for some devices but not others
  7961. SeeAlso: AX=0504h,AX=0509h,AX=0800h,AX=0801h
  7962. --------E-310509-----------------------------
  7963. INT 31 P - DPMI 1.0+ - MAP CONVENTIONAL MEMORY IN MEMORY BLOCK
  7964.     AX = 0509h
  7965.     ESI = memory block handle
  7966.     EBX = page-aligned offset within memory block of page(s) to map
  7967.     ECX = number of pages to map
  7968.     EDX = page-aligned linear address of conventional (below 1M) memory
  7969. Return: CF clear if successful
  7970.     CF set on error
  7971.         AX = error code (8001h,8003h,8023h,8025h) (see #2775)
  7972. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  7973.     support of this function is optional
  7974. SeeAlso: AX=0504h,AX=0508h,AX=0801h
  7975. --------E-31050A-----------------------------
  7976. INT 31 P - DPMI 1.0+ - GET MEMORY BLOCK SIZE AND BASE
  7977.     AX = 050Ah
  7978.     SI:DI = memory block handle
  7979. Return: CF clear if successful
  7980.         SI:DI = size in bytes
  7981.         BX:CX = base address
  7982.     CF set on error
  7983.         AX = error code (8023h) (see #2775)
  7984. SeeAlso: AX=0501h,AX=0504h
  7985. --------E-31050B-----------------------------
  7986. INT 31 P - DPMI 1.0+ - GET MEMORY INFORMATION
  7987.     AX = 050Bh
  7988.     ES:(E)DI -> 128-byte buffer for memory information (see #2789)
  7989. Return: CF clear if successful
  7990.     CF set on error (DPMI 0.9 only)
  7991. Note:    16-bit programs use ES:DI, 32-bit programs must use ES:EDI
  7992. SeeAlso: AX=0500h
  7993.  
  7994. Format of DPMI memory information:
  7995. Offset    Size    Description    (Table 2789)
  7996.  00h    DWORD    total allocated bytes of physical memory controlled by host
  7997.  04h    DWORD    total allocated bytes of virtual memory controlled by host
  7998.  08h    DWORD    total available bytes of virtual memory controlled by host
  7999.  0Ch    DWORD    total allocated bytes of virtual memory for curr virtual mach
  8000.  10h    DWORD    total available bytes of virtual memory for curr virtual mach
  8001.  14h    DWORD    total allocated bytes of virtual memory for current client
  8002.  18h    DWORD    total available bytes of virtual memory for current client
  8003.  1Ch    DWORD    total locked bytes for current client
  8004.  20h    DWORD    maximum locked bytes for current client
  8005.  24h    DWORD    highest linear address available to current client
  8006.  28h    DWORD    largest available memory block in bytes
  8007.  2Ch    DWORD    minimum allocation unit in bytes
  8008.  30h    DWORD    allocation alignment unit size in bytes
  8009.  34h 76 BYTEs    reserved (00h)
  8010. --------E-310600-----------------------------
  8011. INT 31 P - DPMI 0.9+ - LOCK LINEAR REGION
  8012.     AX = 0600h
  8013.     BX:CX = starting linear address
  8014.     SI:DI = size of region in bytes
  8015. Return: CF clear if successful
  8016.     CF set on error
  8017.         none of the memory is locked
  8018.         AX = error code (DPMI 1.0+) (8013h,8017h,8025h) (see #2775)
  8019. Notes:    pages at beginning and end will be locked if the region overlaps them
  8020.     may be called multiple times for a given page; the DPMI host keeps a
  8021.       lock count for each page
  8022. SeeAlso: AX=0004h,AX=0601h,INT 21/AX=251Ah,INT 21/AX=EB06h
  8023. --------E-310601-----------------------------
  8024. INT 31 P - DPMI 0.9+ - UNLOCK LINEAR REGION
  8025.     AX = 0601h
  8026.     BX:CX = starting linear address
  8027.     SI:DI = size of region in bytes
  8028. Return: CF clear if successful
  8029.     CF set on error
  8030.         none of the memory is unlocked
  8031.         AX = error code (DPMI 1.0+) (8002h,8025h) (see #2775)
  8032. Notes:    pages at beginning and end will be unlocked if the region overlaps them
  8033.     memory whose lock count has not reached zero remains locked
  8034. SeeAlso: AX=0005h,AX=0600h,INT 21/AX=251Bh,INT 21/AX=EB07h
  8035. --------E-310602-----------------------------
  8036. INT 31 P - DPMI 0.9+ - MARK REAL MODE REGION AS PAGEABLE
  8037.     AX = 0602h
  8038.     BX:CX = starting linear address
  8039.     SI:DI = size of region in bytes
  8040. Return: CF clear if successful
  8041.     CF set on error
  8042.         none of the memory is made pageable
  8043.         AX = error code (DPMI 1.0+) (8002h,8025h) (see #2775)
  8044. Notes:    must relock all unlocked real mode memory before terminating process
  8045.       for DPMI 0.9; DPMI 1.0+ automatically relocks real mode memory
  8046.     pages at beginning and end will be unlocked if the region overlaps them
  8047.     pageability of real mode pages is binary, not a count
  8048. SeeAlso: AX=0600h,AX=0603h
  8049. --------E-310603-----------------------------
  8050. INT 31 P - DPMI 0.9+ - RELOCK REAL MODE REGION
  8051.     AX = 0603h
  8052.     BX:CX = starting linear address
  8053.     SI:DI = size of region in bytes
  8054. Return: CF clear if successful
  8055.     CF set on error
  8056.         none of the memory is relocked
  8057.         AX = error code (DPMI 1.0+) (8002h,8013h,8025h) (see #2775)
  8058. Notes:    pages at beginning and end will be relocked if the region overlaps them
  8059.     pageability of real mode pages is binary, not a count
  8060. SeeAlso: AX=0602h
  8061. --------E-310604-----------------------------
  8062. INT 31 P - DPMI 0.9+ - GET PAGE SIZE
  8063.     AX = 0604h
  8064. Return: CF clear if successful
  8065.         BX:CX = page size in bytes
  8066.     CF set on error
  8067.         AX = error code (DPMI 1.0+) (see also #2775)
  8068.         8001h unsupported, 16-bit host
  8069. BUG:    the Borland C++ 3.1 DPMILOAD returns with CF clear but BX and CX
  8070.       unchanged
  8071. --------E-310700-----------------------------
  8072. INT 31 Pu - DPMI 0.9+ - MARK PAGES AS PAGING CANDIDATES
  8073.     AX = 0700h
  8074.     BX:CX = starting linear page number
  8075.     SI:DI = number of pages to mark as paging candidates
  8076. Return: ???
  8077. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  8078.       specification, this function is called by MS Windows TASKMAN,
  8079.       PROGMAN, and KERNEL
  8080. SeeAlso: AX=0701h,AX=0702h
  8081. --------E-310701-----------------------------
  8082. INT 31 Pu - DPMI 0.9+ - DISCARD PAGES
  8083.     AX = 0701h
  8084.     BX:CX = starting linear page number
  8085.     SI:DI = number of pages to discard
  8086. Return: ???
  8087. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  8088.       specification, this function is called by MS Windows TASKMAN,
  8089.       PROGMAN, and KERNEL
  8090. SeeAlso: AX=0700h,AX=0703h
  8091. --------E-310702-----------------------------
  8092. INT 31 P - DPMI 0.9+ - MARK PAGE AS DEMAND PAGING CANDIDATE
  8093.     AX = 0702h
  8094.     BX:CX = starting linear address
  8095.     SI:DI = number of bytes to mark as paging candidates
  8096. Return: CF clear if successful
  8097.     CF set on error
  8098.         AX = error code (DPMI 1.0+) (8025h) (see #2775)
  8099. Notes:    this function is advisory, and does not force immediate paging
  8100.     partial pages will not be discarded
  8101. SeeAlso: AX=0700h,AX=0703h
  8102. --------E-310703-----------------------------
  8103. INT 31 P - DPMI 0.9+ - DISCARD PAGE CONTENTS
  8104.     AX = 0703h
  8105.     BX:CX = starting linear address
  8106.     SI:DI = number of bytes to mark as discarded
  8107. Return: CF clear if successful
  8108.     CF set on error
  8109.         AX = error code (DPMI 1.0+) (8025h) (see #2775)
  8110. Notes:    this function is advisory, and may be ignored by DPMI implementations
  8111.     partial pages will not be discarded
  8112. SeeAlso: AX=0701h,AX=0702h
  8113. --------E-310800-----------------------------
  8114. INT 31 P - DPMI 0.9+ - PHYSICAL ADDRESS MAPPING
  8115.     AX = 0800h
  8116.     BX:CX = physical address (should be above 1 MB)
  8117.     SI:DI = size in bytes
  8118. Return: CF clear if successful
  8119.         BX:CX = linear address which maps the requested physical memory
  8120.     CF set on error
  8121.         AX = error code (DPMI 1.0+) (8003h,8021h) (see #2775)
  8122. Notes:    implementations may refuse this call because it can circumvent protects
  8123.     the caller must build an appropriate selector for the memory
  8124.     do not use for memory mapped in the first megabyte
  8125. SeeAlso: AX=0002h,AX=0508h,AX=0509h,AX=0801h,INT 21/AX=250Ah,INT 21/AX=EB05h
  8126. --------E-310801-----------------------------
  8127. INT 31 P - DPMI 1.0+ - FREE PHYSICAL ADDRESS MAPPING
  8128.     AX = 0801h
  8129.     BX:CX = linear address returned by AX=0800h
  8130. Return: CF clear if successful
  8131.     CF set on error
  8132.         AX = error code (8025h) (see #2775)
  8133. Note:    should be called at end of access to device mapped with AX=0800h
  8134. SeeAlso: AX=0508h,AX=0509h,AX=0800h,INT 21/AX=EB03h
  8135. --------E-310900-----------------------------
  8136. INT 31 P - DPMI 0.9+ - GET AND DISABLE VIRTUAL INTERRUPT STATE
  8137.     AX = 0900h
  8138. Return: CF clear
  8139.     virtual interrupts disabled
  8140.     AL = previous interrupt state (00h disabled, 01h enabled)
  8141.     AH preserved
  8142. Notes:    the previous state may be restored simply by executing another INT 31
  8143.     a CLI instruction may be used if the previous state is unimportant,
  8144.       but should be assumed to be very slow due to trapping by the host
  8145. SeeAlso: AX=0901h,AX=0902h
  8146. --------E-310901-----------------------------
  8147. INT 31 P - DPMI 0.9+ - GET AND ENABLE VIRTUAL INTERRUPT STATE
  8148.     AX = 0901h
  8149. Return: CF clear
  8150.     virtual interrupts enabled
  8151.     AL = previous interrupt state (00h disabled, 01h enabled)
  8152.     AH preserved
  8153. Notes:    the previous state may be restored simply by executing another INT 31
  8154.     a STI instruction may be used if the previous state is unimportant,
  8155.       but should be assumed to be very slow due to trapping by the host
  8156. SeeAlso: AX=0900h,AX=0902h
  8157. --------E-310902-----------------------------
  8158. INT 31 P - DPMI 0.9+ - GET VIRTUAL INTERRUPT STATE
  8159.     AX = 0902h
  8160. Return: CF clear
  8161.     AL = current interrupt state (00h disabled, 01h enabled)
  8162. Note:    should be used rather than PUSHF because that instruction yields the
  8163.       physical interrupt state rather than the per-client virtualized
  8164.       interrupt flag
  8165. SeeAlso: AX=0900h,AX=0901h
  8166. --------E-310A00-----------------------------
  8167. INT 31 P - DPMI 0.9+ - GET VENDOR SPECIFIC API ENTRY POINT
  8168.     AX = 0A00h
  8169.     DS:(E)SI -> case-sensitive ASCIZ vendor name or identifier
  8170. Return: CF clear if successful
  8171.         ES:(E)DI -> FAR extended API entry point
  8172.         DS, FS, GS, EAX, EBX, ECX, EDX, ESI, EBP destroyed
  8173.     CF set on error
  8174.         AX = error code (DPMI 1.0+) (8001h) (see #2775)
  8175. Notes:    extended API parameters are vendor-specific
  8176.     DPMI 1.0+ supports this function solely for backward compatibility; use
  8177.       INT 2F/AX=168Ah instead
  8178.     this function is not supported by MS Windows 3.10, BC++ 3.1 DPMILOAD,
  8179.       or QDPMI v1.0x; use INT 2F/AX=168Ah instead.    It is supported by
  8180.       386MAX v7.01.
  8181. SeeAlso: INT 2F/AX=168Ah
  8182. --------E-310B00-----------------------------
  8183. INT 31 P - DPMI 0.9+ - SET DEBUG WATCHPOINT
  8184.     AX = 0B00h
  8185.     BX:CX = linear address
  8186.     DL = size (1,2,4 bytes)
  8187.     DH = type (00h execute, 01h write, 02h read/write)
  8188. Return: CF clear if successful
  8189.         BX = watchpoint handle
  8190.     CF set on error
  8191.         AX = error code (DPMI 1.0+) (8016h,8021h,8025h) (see #2775)
  8192. SeeAlso: AX=0212h,AX=0601h
  8193. --------E-310B01-----------------------------
  8194. INT 31 P - DPMI 0.9+ - CLEAR DEBUG WATCHPOINT
  8195.     AX = 0B01h
  8196.     BX = watchpoint handle
  8197. Return: CF clear if successful
  8198.     CF set on error
  8199.         AX = error code (DPMI 1.0+) (8023h) (see #2775)
  8200. Note:    the watchpoint handle is freed
  8201. SeeAlso: AX=0B00h
  8202. --------E-310B02-----------------------------
  8203. INT 31 P - DPMI 0.9+ - GET STATE OF DEBUG WATCHPOINT
  8204.     AX = 0B02h
  8205.     BX = watchpoint handle
  8206. Return: CF clear if successful
  8207.         AX = status flags
  8208.         bit 0: watch point has been executed since AX=0B00h or AX=0B03h
  8209.     CF set on error
  8210.         AX = error code (DPMI 1.0+) (8023h) (see #2775)
  8211. SeeAlso: AX=0B00h,AX=0B03h
  8212. --------E-310B03-----------------------------
  8213. INT 31 P - DPMI 0.9+ - RESET DEBUG WATCHPOINT
  8214.     AX = 0B03h
  8215.     BX = watchpoint handle
  8216. Return: CF clear if successful
  8217.     CF set on error
  8218.         AX = error code (DPMI 1.0+) (8023h) (see #2775)
  8219. SeeAlso: AX=0B02h
  8220. --------E-310C00-----------------------------
  8221. INT 31 P - DPMI 1.0+ - INSTALL RESIDENT HANDLER INIT CALLBACK
  8222.     AX = 0C00h
  8223.     ES:(E)DI -> resident service provider structure (see #2790)
  8224. Return: CF clear if successful
  8225.     CF set on error
  8226.         AX = error code (8015h,8021h,8025h) (see #2775 at AX=0000h)
  8227. Note:    calling this function declares an intent to provide resident
  8228.       protected mode services after terminating with AX=0C01h
  8229. SeeAlso: AX=0303h,AX=0C01h
  8230.  
  8231. Format of DPMI resident service provider structure:
  8232. Offset    Size    Description    (Table 2790)
  8233.  00h    QWORD    descriptor for 16-bit data segment
  8234.  08h    QWORD    descriptor for 16-bit code segment (zeros if not supported)
  8235.  10h    WORD    offset of 16-bit callback procedure
  8236.  12h  2 BYTEs    reserved
  8237.  14h    QWORD    descriptor for 32-bit data segment
  8238.  1Ch    QWORD    descriptor for 32-bit code segment (zeros if not supported)
  8239.  24h    DWORD    offset of 32-bit callback procedure
  8240. --------E-310C01-----------------------------
  8241. INT 31 P - DPMI 1.0+ - TERMINATE AND STAY RESIDENT
  8242.     AX = 0C01h
  8243.     BL = return code
  8244.     DX = number of paragraphs of DOS memory to reserve (0 or >= 6)
  8245. Return: never
  8246. Notes:    should only be used if the program will only provide services to
  8247.       other DPMI programs
  8248.     any protected mode memory remains allocated to the program unless
  8249.       explicitly freed before this call
  8250.     must first call AX=0C00h or program will simply be terminated
  8251. SeeAlso: AX=0C00h,INT 21/AH=31h
  8252. --------E-310D00-----------------------------
  8253. INT 31 P - DPMI 1.0+ - ALLOCATE SHARED MEMORY
  8254.     AX = 0D00h
  8255.     ES:(E)DI -> shared memory allocation request structure (see #2791)
  8256. Return: CF clear if successful
  8257.         request structure updated
  8258.     CF set on error
  8259.         AX = error code (8012h,8013h,8014h,8016h,8021h) (see #2775)
  8260. Note:    first 16 bytes of memory block will be initialized to zeros on the
  8261.       first allocation
  8262. SeeAlso: AX=0501h,AX=0D01h,AX=0D02h
  8263.  
  8264. Format of DPMI shared memory allocation request structure:
  8265. Offset    Size    Description    (Table 2791)
  8266.  00h    DWORD    requested length of shared memory block in bytes
  8267.  04h    DWORD    (ret) allocated length of block
  8268.  08h    DWORD    (ret) shared memory handle
  8269.  0Ch    DWORD    (ret) linear address of memory block
  8270.  10h    PWORD    selector:offset32 of ASCIZ name for memory block
  8271.         (name max 128 bytes)
  8272.  16h  2 BYTEs    reserved
  8273.  18h  4 BYTEs    reserved (00h)
  8274. --------E-310D01-----------------------------
  8275. INT 31 P - DPMI 1.0+ - FREE SHARED MEMORY
  8276.     AX = 0D01h
  8277.     SI:DI = shared memory block handle
  8278. Return: CF clear if successful
  8279.     CF set on error
  8280.         AX = error code (8023h) (see #2775)
  8281. Notes:    handle becomes invalid after this call
  8282.     DPMI maintains separate global and virtual machine use counts for each
  8283.       shared memory block; when the global use counts reaches zero, the
  8284.       block is finally destroyed
  8285. SeeAlso: AX=0502h,AX=0D00h
  8286. --------E-310D02-----------------------------
  8287. INT 31 P - DPMI 1.0+ - SERIALIZE SHARED MEMORY
  8288.     AX = 0D02h
  8289.     SI:DI = shared memory block handle
  8290.     DX = flags
  8291.         bit 0: return immediately rather than suspending if serialization
  8292.           unavailable
  8293.         bit 1: shared rather than exclusive serialization
  8294.         bits 2-15 reserved (0)
  8295. Return: CF clear if successful
  8296.     CF set on error
  8297.         AX = error code (8004h,8005h,8017h-8019h,8023h) (see #2775)
  8298. Notes:    an exclusive serialization blocks any other serialization attempts for
  8299.       the same block by another virtual machine; a shared serialization
  8300.       blocks attempts at exclusive serialization by another virtual machine
  8301.     hosts are not required to detect deadlock
  8302.     a client's interrupt handler can cancel a serialization call which
  8303.       caused it to block by calling AX=0D03h
  8304. SeeAlso: AX=0D00h,AX=0D03h
  8305. --------E-310D03-----------------------------
  8306. INT 31 P - DPMI 1.0+ - FREE SERIALIZATION ON SHARED MEMORY
  8307.     AX = 0D03h
  8308.     SI:DI = shared memory block handle
  8309.     DX = flags
  8310.         bit 0: release shared serialization rather than exclusive serialztn
  8311.         bit 1: free pending serialization
  8312.         bits 2-15 reserved (0)
  8313. Return: CF clear if successful
  8314.     CF set on error
  8315.         AX = error code (8002h,8023h) (see #2775 at AX=0000h)
  8316. SeeAlso: AX=0D00h,AX=0D02h
  8317. --------E-310E00-----------------------------
  8318. INT 31 P - DPMI 1.0+ - GET COPROCESSOR STATUS
  8319.     AX = 0E00h
  8320. Return: CF clear
  8321.     AX = coprocessor status (see #2792)
  8322. Note:    supported by 386MAX v6.01, which otherwise only supports DPMI 0.9
  8323. SeeAlso: AX=0E01h
  8324.  
  8325. Bitfields for DPMI coprocessor status:
  8326. Bit(s)    Description    (Table 2792)
  8327.  0    numeric coprocessor enabled for current client
  8328.  1    client is emulating coprocessor
  8329.  2    numeric coprocessor is present
  8330.  3    host is emulating coprocessor instructions
  8331.  4-7    coprocessor type
  8332.     0000 none
  8333.     0010 80287
  8334.     0011 80387
  8335.     0100 80486 with numeric coprocessor
  8336.     other reserved
  8337.  8-15    not used
  8338. --------E-310E01-----------------------------
  8339. INT 31 P - DPMI 1.0+ - SET EMULATION
  8340.     AX = 0E01h
  8341.     BX = coprocessor flag bits (see #2793)
  8342. Return: CF clear if successful
  8343.     CF set on error
  8344.         AX = error code (8026h) (see #2775 at AX=0000h)
  8345. Note:    supported by 386MAX v6.01, which otherwise only supports DPMI 0.9
  8346. SeeAlso: AX=0E00h
  8347.  
  8348. Bitfields for DPMI coprocessor flags:
  8349. Bit(s)    Description    (Table 2793)
  8350.  0    enable numeric coprocessor for current client
  8351.  1    client will emulate coprocessor
  8352.  2-15    not used
  8353. --------E-3157-------------------------------
  8354. INT 31 - Netroom3 DPMI.EXE v3.00 - ???
  8355.     AH = 57h
  8356.     AL = subfunction (at least 02h,03h,04h,05h,07h,08h,09h,0Ah)
  8357.     ???
  8358. Return: ???
  8359. SeeAlso: INT 2C/AX=0000h"Cloaking"
  8360. --------E-315702-----------------------------
  8361. INT 31 - Netroom3 DPMI.EXE v3.00 - SWITCH TO PROTECTED MODE
  8362.     AX = 5702h
  8363.     DX = PSP segment of caller
  8364.     STACK: WORD    ???
  8365.            WORD    flags (bit 0 set if 32-bit program)
  8366. Return: as for DPMI mode-switch entry point (see #2366 at INT 2F/AX=1687h)
  8367. Note:    this function is called by the real-mode DPMI mode-switch entry point
  8368. SeeAlso: INT 2F/AX=1687h
  8369. --------E-31EE00------------------------
  8370. INT 31 - DOS32 v3.0+ - GET DOS32 VERSION AND SELECTOR VALUES
  8371.     AX = EE00h
  8372. Return: AL = minor version (BCD)
  8373.     AH = major version (BCD)
  8374.     DL = system type (1=raw DOS, 2=XMS, 4=VCPI, 8=DPMI)
  8375.     BX = selector of 4GB data segment with zero base address
  8376. Program: DOS32 is a 32 bit DOS extender by Adam Seychell.
  8377. SeeAlso: AX=EE02h
  8378. --------E-31EE02------------------------
  8379. INT 31 - DOS32 v3.0+ - GET DOS32 ADDRESS INFORMATION
  8380.     AX = EE02h
  8381. Return: AX = real-mode segment of temporary 8K buffer (v3.1+)
  8382.     EBX = 32bit linear address of the program segment
  8383.     EDX = Total size in bytes of the programs .EXE file after linking.
  8384.     ESI = offset address of PSP
  8385.     EDI = offset address of program environment
  8386.     ECX = offset address of the program's .EXE ASCIZ file name and path
  8387. SeeAlso: AX=EE00h,AX=EE20h
  8388. --------E-31EE10------------------------
  8389. INT 31 - DOS32 v3.2+ - SET UP A DOS32 LOADABLE LIBRARY
  8390.     AX = EE10h
  8391.     EDX -> library ASCIZ path\filename
  8392.     EBX = number of bytes to seek from beginning of file
  8393. Return: CF clear if successful
  8394.         EAX = size of memory block required to store library
  8395.         EBX = size of library file
  8396.     CF set on error
  8397.         AL = error code.
  8398.         01h error opening or reading file
  8399.         02h bad DOS32 library file
  8400. SeeAlso: AX=EE00h,AX=EE11h
  8401. --------E-31EE11------------------------
  8402. INT 31 - DOS32 v3.2+ - LOAD LIBRARY FILE
  8403.     AX = EE11h
  8404.     EDX -> near pointer of memory block to store library
  8405. Return: CF clear if successful
  8406.         EDX = near pointer to the dynamic library public
  8407.     CF set on error
  8408. Note:    must first successfuly call function AX=EE10h before calling this
  8409.       function
  8410. SeeAlso: AX=EE00h,AX=EE10h
  8411. --------E-31EE20------------------------
  8412. INT 31 - DOS32 v3.0+ - GET REAL MODE CALL BACK ADDRESS WITH RETF STACK FRAME
  8413.     AX = EE20h
  8414.     ESI = offset of the real mode call back function
  8415. Return: CF clear if successful
  8416.         CX:DX = real mode address to call up to the protected mode
  8417.           procedure
  8418.     CF set on error
  8419. SeeAlso: AX=EE00h,AX=EE02h,AX=EE21h
  8420. --------E-31EE21------------------------
  8421. INT 31 - DOS32 v3.0+ - GET REAL MODE CALL BACK ADDRESS WITH IRET STACK FRAME
  8422.     AX = EE21h
  8423.     ESI = offset of the real mode call back function
  8424. Return: CF clear if successful
  8425.         CX:DX = real mode address to call up to the protected mode
  8426.           procedure
  8427.     CF set on error
  8428. SeeAlso: AX=EE20h
  8429. --------E-31EE30------------------------
  8430. INT 31 - DOS32 v3.0+ - TERMINATE AND STAY RESIDENT
  8431.     AX = EE30h
  8432. SeeAlso: AX=EE21h,AX=EE40h,INT 21/AH=31h
  8433. --------E-31EE40------------------------
  8434. INT 31 - DOS32 v3.0+ - UNDO PREVIOUS MEMORY ALLOCATION or DMA BUFFER
  8435.     AX = EE40h
  8436. Return: CF clear if successful
  8437.     CF set on error
  8438. SeeAlso: AX=EE41h,AX=EE42h
  8439. --------E-31EE41------------------------
  8440. INT 31 - DOS32 v3.0+ - ALLOCATE 16KB DMA BLOCK
  8441.     AX = EE41h
  8442. Return: CF clear if successful
  8443.         EBX -> 16KB DMA block (physical address)
  8444.         EDX -> 16KB DMA block (offset address)
  8445.     CF set on error
  8446. SeeAlso: AX=EE40h,AX=EE42h
  8447. --------E-31EE42------------------------
  8448. INT 31 - DOS32 v3.0+ - ALLOCATE MEMORY BLOCK
  8449.     AX = EE42h
  8450.     EDX = size in bytes
  8451. Return: CF clear if successful
  8452.         EAX = size in bytes
  8453.         EDX -> memory block
  8454.     CF set on error
  8455. Note:    size is rounded off to the next 4KB boundary
  8456. SeeAlso: AX=EE40h,AX=EE41h
  8457. --------E-31FF00-----------------------------
  8458. INT 31 P - CauseWay - "Info" - GET SYSTEM SELECTORS/FLAGS
  8459.     AX = FF00h
  8460. Return: AX = selector for flag address space (base 00000000h, limit 4GB)
  8461.     BX = selector for current PSP segment (limit 0100h)
  8462.     (E)CX = size of DOS transfer buffer (max 64K)
  8463.     DX = real-mode segment address of DOS transfer buffer
  8464.     ES:(E)SI = protected-mode address of DOS transfer buffer
  8465.     EDI = system flags (see #2794)
  8466. Program: CauseWay is a 386 DOS extender by Michael Devore and John Wildsmith
  8467.       for use with Watcom C++ or assembly language programs
  8468. Notes:    the entire transfer buffer can be addressed with a 16-bit offset in
  8469.       protected mode
  8470.     CauseWay always maps selector 0040h to the BIOS data segment at
  8471.       real-mode segment 0040h; when not running under a DPMI host, CauseWay
  8472.       also provides selectors A000h, B000h, and B800h mapped to video
  8473.       memory
  8474. SeeAlso: AX=FF25h
  8475.  
  8476. Bitfields for CauseWay system flags:
  8477. Bit(s)    Description    (Table 2794)
  8478.  0    32-bit code
  8479.  1    virtual memory manage enabled
  8480.  3-2    mode: 00 raw extended memory, 01 VCPI, 10 DPMI
  8481.  4    DPMI available
  8482.  5    VCPI available
  8483.  6    no memory managers
  8484.  7    application descriptor table type: 0 = GDT, 1 = LDT
  8485.  14-8    reserved
  8486.  15    debugging engine present
  8487. --------E-31FF01-----------------------------
  8488. INT 31 P - CauseWay - "IntXX" - SIMULATE REAL-MODE INTERRUPT
  8489.     AX = FF01h
  8490.     BL = interrupt number
  8491.     ES:(E)DI -> real-mode register list (see #2780 at AX=0300h)
  8492. Return: register list updated
  8493. Note:    CauseWay fills in the values for SS, SP, and FLAGS itself, and ignores
  8494.       the values specified for CS and IP
  8495. SeeAlso: AX=0300h,AX=FF02h
  8496. --------E-31FF02-----------------------------
  8497. INT 31 P - CauseWay - "FarCallReal" - SIMULATE REAL-MODE FAR CALL
  8498.     AX = FF02h
  8499.     ES:(E)DI -> real-mode register list (see #2780 at AX=0300h)
  8500. Return: register list updated
  8501. SeeAlso: AX=0301h,AX=FF01h
  8502. --------E-31FF03-----------------------------
  8503. INT 31 P - CauseWay - "GetSel" - ALLOCATE NEW SELECTOR
  8504.     AX = FF03h
  8505. Return: CF clear if successful
  8506.         BX = new selector
  8507.     CF set on error
  8508. Note:    the new selector is initialized with a base address of 000000h, a limit
  8509.       of 0000h, and attributes read/write expand-up data
  8510. SeeAlso: AX=FF04h,AX=FF05h,AX=FF06h
  8511. --------E-31FF04-----------------------------
  8512. INT 31 P - CauseWay - "RelSel" - RELEASE A SELECTOR
  8513.     AX = FF04h
  8514.     BX = selector
  8515. Return: CF clear if successful
  8516.     CF set on error
  8517. SeeAlso: AX=FF03h,AX=FF06h
  8518. --------E-31FF05-----------------------------
  8519. INT 31 P - CauseWay - "CodeSel" - CONVERT SELECTOR TO EXECUTABLE CODE SELECTOR
  8520.     AX = FF05h
  8521.     BX = selector
  8522.     CL = default operation size (00h = 16-bit, 01h = 32-bit)
  8523. Return: CF clear if successful
  8524.     CF set on error
  8525. SeeAlso: AX=FF03h
  8526. --------E-31FF06-----------------------------
  8527. INT 31 P - CauseWay - "AliasSel" - CREATE READ/WRITE DATA ALIAS SELECTOR
  8528.     AX = FF06h
  8529.     BX = original selector
  8530. Return: CF clear if successful
  8531.         AX = new data selector aliasing original selector
  8532.     CF set on error
  8533. SeeAlso: AX=FF03h,AX=FF04h
  8534. --------E-31FF07-----------------------------
  8535. INT 31 P - CauseWay - "GetSelDet" - GET SELECTOR BASE AND LIMIT
  8536.     AX = FF07h
  8537.     BX = selector
  8538. Return: CF clear if successful
  8539.         CX:DX = base address
  8540.         SI:DI = limit (bytes)
  8541.     CF set on error
  8542. SeeAlso: AX=FF08h,AX=FF09h
  8543. --------E-31FF08-----------------------------
  8544. INT 31 P - CauseWay - "GetSelDet32" - GET SELECTOR BASE AND LIMIT (32-bit)
  8545.     AX = FF08h
  8546. Return: CF clear if successful
  8547.         EDX = base address
  8548.         ECX = limit (bytes)
  8549.     CF set on error
  8550. SeeAlso: AX=FF07h,AX=FF0Ah
  8551. --------E-31FF09-----------------------------
  8552. INT 31 P - CauseWay - "SetSelDet" - SET SELECTOR BASE AND LIMIT
  8553.     AX = FF09h
  8554.     BX = selector
  8555.     CX:DX = new base address
  8556.     SI:DI = new byte-granular limit
  8557. Return: CF clear if successful
  8558.     CF set on error
  8559. SeeAlso: AX=FF07h,AX=FF0Ah
  8560. --------E-31FF0A-----------------------------
  8561. INT 31 P - CauseWay - "SetSelDet32" - SET SELECTOR BASE AND LIMIT (32-bit)
  8562.     AX = FF0Ah
  8563.     BX = selector
  8564.     EDX = new base address
  8565.     ECX = new byte-granular limit
  8566. Return: CF clear if successful
  8567.     CF set on error
  8568. SeeAlso: AX=FF08h,AX=FF09h
  8569. --------E-31FF0B-----------------------------
  8570. INT 31 P - CauseWay - "GetMem" - ALLOCATE BLOCK OF MEMORY
  8571.     AX = FF0Bh
  8572.     CX:DX = size in bytes (FFFFh:FFFFh to get size of largest available)
  8573. Return: CF clear if successful
  8574.         BX = selector for accessing block if requested size not FFFFh:FFFFh
  8575.         CX:DX = size of largest available block if requested FFFFh:FFFFh
  8576.     CF set on error
  8577. SeeAlso: AX=FF0Ch,AX=FF0Dh,AX=FF0Fh,AX=FF10h,AX=FF2Ch
  8578. --------E-31FF0C-----------------------------
  8579. INT 31 P - CauseWay - "GetMem32" - ALLOCATE BLOCK OF MEMORY (32-bit)
  8580.     AX = FF0Ch
  8581.     ECX = size in bytes (FFFFFFFFh to get size of largest available block)
  8582. Return: CF clear if successful
  8583.         BX = selector for accessing block if requested size not FFFFh:FFFFh
  8584.         ECX = size of largest available block if requested FFFFh:FFFFh
  8585.     CF set on error
  8586. SeeAlso: AX=FF0Bh,AX=FF0Eh,AX=FF0Fh,AX=FF11h
  8587. --------E-31FF0D-----------------------------
  8588. INT 31 P - CauseWay - "ResMem" - RESIZE MEMORY BLOCK
  8589.     AX = FF0Dh
  8590.     BX = selector for block to be resized
  8591.     CX:DX = new size in bytes
  8592. Return: CF clear if successful
  8593.     CF set on error
  8594. Note:    the memory block may have to be copied to another location in order
  8595.       to satisfy the requested new size, in which case the base address
  8596.       of the selector is updated
  8597. SeeAlso: AX=FF0Bh,AX=FF0Eh,AX=FF12h
  8598. --------E-31FF0E-----------------------------
  8599. INT 31 P - CauseWay - "ResMem32" - RESIZE MEMORY BLOCK (32-bit)
  8600.     AX = FF0Eh
  8601.     BX = selector for block to be resized
  8602.     ECX = new size in bytes
  8603. Return: CF clear if successful
  8604.     CF set on error
  8605. Note:    the memory block may have to be copied to another location in order
  8606.       to satisfy the requested new size, in which case the base address
  8607.       of the selector is updated
  8608. SeeAlso: AX=FF0Ch,AX=FF0Dh,AX=FF13h
  8609. --------E-31FF0F-----------------------------
  8610. INT 31 P - CauseWay - "RelMem" - RELEASE PREVIOUSLY ALLOCATED MEMORY
  8611.     AX = FF0Fh
  8612.     BX = selector for block to be released
  8613. Return: CF clear if successful
  8614.     CF set on error
  8615. SeeAlso: AX=FF0Bh,AX=FF0Ch,AX=FF14h
  8616. --------E-31FF10-----------------------------
  8617. INT 31 P - CauseWay - "GetMemLinear" - ALLOCATE MEMORY WITHOUT SELECTOR
  8618.     AX = FF10h
  8619.     CX:DX = size of block in bytes
  8620. Return: CF clear if successful
  8621.         SI:DI = linear address of allocated block
  8622.     CF set on error
  8623. Note:    this function may return addresses above 16M
  8624. SeeAlso: AX=FF0Bh,AX=FF11h,AX=FF12h,AX=FF14h
  8625. --------E-31FF11-----------------------------
  8626. INT 31 P - CauseWay - "GetMemLinear32" - ALLOCATE MEMORY WITHOUT SELECTOR
  8627.     AX = FF11h
  8628.     ECX = size of block in bytes
  8629. Return: CF clear if successful
  8630.         ESI = linear address of allocated block
  8631.     CF set on error
  8632. Note:    this function may return addresses above 16M
  8633. SeeAlso: AX=FF0Ch,AX=FF10h,AX=FF13h,AX=FF14h
  8634. --------E-31FF12-----------------------------
  8635. INT 31 P - CauseWay - "ResMemLinear" - RESIZE LINEAR MEMORY BLOCK
  8636.     AX = FF12h
  8637.     CX:DX = new size in bytes
  8638.     SI:DI = linear address of block to be resized
  8639. Return: CF clear if successful
  8640.        SI:DI = new linear address of block
  8641.     CF set on error
  8642. SeeAlso: AX=FF0Dh,AX=FF10h,AX=FF13h
  8643. --------E-31FF13-----------------------------
  8644. INT 31 P - CauseWay - "ResMemLinear32" - RESIZE LINEAR MEMORY BLOCK (32-bit)
  8645.     AX = FF13h
  8646.     ECX = new size in bytes
  8647.     ESI = linear address of block to be resized
  8648. Return: CF clear if successful
  8649.        ESI = new linear address of block
  8650.     CF set on error
  8651. SeeAlso: AX=FF0Eh,AX=FF11h,AX=FF12h
  8652. --------E-31FF14-----------------------------
  8653. INT 31 P - CauseWay - "RelMemLinear" - RELEASE LINEAR MEMORY BLOCK
  8654.     AX = FF14h
  8655.     SI:DI = linear address of block to be released
  8656. Return: CF clear if successful
  8657.     CF set on error
  8658. SeeAlso: AX=FF0Fh,AX=FF10h,AX=FF15h
  8659. --------E-31FF15-----------------------------
  8660. INT 31 P - CauseWay - "RelMemLinear32" - RELEASE LINEAR MEMORY BLOCK (32-bit)
  8661.     AX = FF15h
  8662.     ESI = linear address of block to be released
  8663. Return: CF clear if successful
  8664.     CF set on error
  8665. SeeAlso: AX=FF0Fh,AX=FF11h,AX=FF15h
  8666. --------E-31FF16-----------------------------
  8667. INT 31 P - CauseWay - "GetMemNear" - ALLOCATE APPLICATION-RELATIVE MEMORY
  8668.     AX = FF16h
  8669.     EBX = size in bytes of block to allocate
  8670. Return: CF clear if successful
  8671.        ESI = application-relative linear address of allocated block
  8672.     CF set on error
  8673. SeeAlso: AX=FF17h,AX=FF18h,AX=FF19h
  8674. --------E-31FF17-----------------------------
  8675. INT 31 P - CauseWay - "ResMemNear" - RESIZE APPLICATION-RELATIVE MEMORY BLOCK
  8676.     AX = FF17h
  8677.     EBX = size in bytes of block to allocate
  8678.     ESI = application-relative linear address of block
  8679. Return: CF clear if successful
  8680.         ESI = new application-relative linear address of block
  8681.     CF set on error
  8682. SeeAlso: AX=FF16h,AX=FF18h,AX=FF19h
  8683. --------E-31FF18-----------------------------
  8684. INT 31 P - CauseWay - "RelMemNear" - RELEASE APPLICATION-RELATIVE MEMORY BLOCK
  8685.     AX = FF18h
  8686.     ESI = application-relative linear address of block
  8687. Return: CF clear if successful
  8688.     CF set on error
  8689. SeeAlso: AX=FF16h,AX=FF17h,AX=FF19h
  8690. --------E-31FF19-----------------------------
  8691. INT 31 P - CauseWay - "Linear2Near" - CONVERT LINEAR TO APP-RELATIVE ADDRESS
  8692.     AX = FF19h
  8693.     ESI = linear address
  8694. Return: ESI = application-relative linear address
  8695. SeeAlso: AX=FF1Ah
  8696. --------E-31FF1A-----------------------------
  8697. INT 31 P - CauseWay - "Near2Linear" - CONVERT APP-RELATIVE TO LINEAR ADDRESS
  8698.     AX = FF1Ah
  8699.     ESI = application-relative linear address
  8700. Return: ESI = linear address
  8701. SeeAlso: AX=FF19h
  8702. --------E-31FF1B-----------------------------
  8703. INT 31 P - CauseWay - "LockMem" - LOCK REGION OF MEMORY
  8704.     AX = FF1Bh
  8705.     BX:CX = starting linear address
  8706.     SI:DI = size of region in bytes
  8707. Return: CF clear if successful
  8708.     CF set on error
  8709. Desc:    prevent memory from being swapped out by the virtual memory manager
  8710. Note:    locks are applied on 4K page boundaries, so memory above and below
  8711.       the specified region may be locked as well
  8712. SeeAlso: AX=FF1Ch,AX=FF1Dh
  8713. --------E-31FF1C-----------------------------
  8714. INT 31 P - CauseWay - "LockMem32" - LOCK REGION OF MEMORY (32-bit)
  8715.     AX = FF1Ch
  8716.     ESI = starting linear address
  8717.     ECX = size of region in bytes
  8718. Return: CF clear if successful
  8719.     CF set on error
  8720. Desc:    prevent memory from being swapped out by the virtual memory manager
  8721. Note:    locks are applied on 4K page boundaries, so memory above and below
  8722.       the specified region may be locked as well
  8723. SeeAlso: AX=FF1Bh,AX=FF1Eh,AX=FF1Fh
  8724. --------E-31FF1D-----------------------------
  8725. INT 31 P - CauseWay - "UnLockMem" - UNLOCK REGION OF MEMORY
  8726.     AX = FF1Dh
  8727.     BX:CX = starting linear address
  8728.     SI:DI = size of region in bytes
  8729. Return: CF clear if successful
  8730.     CF set on error
  8731. Desc:    allow memory to be swapped out by the virtual memory manager
  8732. Note:    locks are applied on 4K page boundaries, so memory above and below
  8733.       the specified region may be unlocked as well
  8734. SeeAlso: AX=FF1Bh,AX=FF1Eh
  8735. --------E-31FF1E-----------------------------
  8736. INT 31 P - CauseWay - "UnLockMem32" - UNLOCK REGION OF MEMORY (32-bit)
  8737.     AX = FF1Eh
  8738.     ESI = starting linear address
  8739.     ECX = size of region in bytes
  8740. Return: CF clear if successful
  8741.     CF set on error
  8742. Desc:    allow memory to be swapped out by the virtual memory manager
  8743. Note:    locks are applied on 4K page boundaries, so memory above and below
  8744.       the specified region may be unlocked as well
  8745. SeeAlso: AX=FF1Ch,AX=FF1Dh,AX=FF20h
  8746. --------E-31FF1F-----------------------------
  8747. INT 31 P - CauseWay - "LockMemNear" - LOCK APPLICATION-RELATIVE MEMORY REGION
  8748.     AX = FF1Fh
  8749.     ESI = starting application-relative linear address
  8750.     EBX = size of region in bytes
  8751. Return: CF clear if successful
  8752.     CF set on error
  8753. Desc:    prevent memory from being swapped out by the virtual memory manager
  8754. Note:    locks are applied on 4K page boundaries, so memory above and below
  8755.       the specified region may be locked as well
  8756. SeeAlso: AX=FF1Ch,AX=FF20h
  8757. --------E-31FF20-----------------------------
  8758. INT 31 P - CauseWay - "UnLockMemNear" - UNLOCK APP-RELATIVE MEMORY REGION
  8759.     AX = FF20h
  8760.     ESI = starting application-relative linear address
  8761.     ECX = size of region in bytes
  8762. Return: CF clear if successful
  8763.     CF set on error
  8764. Desc:    allow memory to be swapped out by the virtual memory manager
  8765. Note:    locks are applied on 4K page boundaries, so memory above and below
  8766.       the specified region may be unlocked as well
  8767. SeeAlso: AX=FF1Eh,AX=FF1Fh
  8768. --------E-31FF21-----------------------------
  8769. INT 31 P - CauseWay - "GetMemDOS" - ALLOCATE CONVENTIONAL MEMORY
  8770.     AX = FF21h
  8771.     BX = number of paragraphs to allocate
  8772. Return: CF clear if successful
  8773.         AX = real-mode segment of allocated block
  8774.         DX = initial selector for block
  8775.     CF set on error
  8776.         AX = DOS error code (see #1332 at INT 21/AH=59h/BX=0000h)
  8777.         BX = size of largest available block
  8778. Note:    if the requested size is greater than 64K, contiguous selectors will
  8779.       be allocated, one for each 64K; for 32-bit applications, the first
  8780.       selector's limit will be set to the size of the entire block, while
  8781.       that selector will have a limit of 64K for 16-bit applications.  All
  8782.       selectors after the first one have a limit of 64K except the final
  8783.       one
  8784. SeeAlso: AX=FF22h,AX=FF23h,INT 21/AH=48h
  8785. --------E-31FF22-----------------------------
  8786. INT 31 P - CauseWay - "ResMemDOS" - RESIZE CONVENTIONAL MEMORY BLOCK
  8787.     AX = FF22h
  8788.     BX = new size in paragraphs
  8789.     DX = initial selector for block
  8790. Return: CF clear if successful
  8791.     CF set on error
  8792.         AX = DOS error code (see #1332 at INT 21/AH=59h/BX=0000h)
  8793.         BX = maximum number of paragraphs available
  8794. Note:    this function will also fail if the block is expanded past a 64K
  8795.       boundary and the next selector is already in use
  8796. SeeAlso: AX=FF21h,AX=FF23h,INT 21/AH=49h
  8797. --------E-31FF23-----------------------------
  8798. INT 31 P - CauseWay - "RelMemDOS" - RELEASE CONVENTIONAL MEMORY BLOCK
  8799.     AX = FF23h
  8800.     DX = initial selector for block
  8801. Return: CF clear if successful
  8802.     CF set on error
  8803.         AX = DOS error code (see #1332 at INT 21/AH=59h/BX=0000h)
  8804. Note:    all descriptors allocated for the block are freed
  8805. SeeAlso: AX=FF21h,AX=FF22h,INT 21/AH=4Ah
  8806. --------E-31FF24-----------------------------
  8807. INT 31 P - CauseWay - "ExecOverlay" - LOAD AND OPTIONALLY EXECUTE APP CODE
  8808.     AX = FF24h
  8809.     EBX = flags
  8810.         bit 0: don't execute (overlay only)
  8811.         bit 1: don't preserve relocation information
  8812.     ES:EDX -> filename (see also #2795)
  8813.     FS:ESI -> commandline (ESI = 00000000h if no commandline)
  8814.     GS:EDI -> name (CW's /o option)
  8815. Return: CF clear if successful
  8816.         ---EBX bit 0 set---
  8817.         CX:EDX = program entry point (CS:EIP)
  8818.         SI = segment of PSP
  8819.         ---EBX bit 1 set---
  8820.         BX:EAX = initial SS:ESP
  8821.         EDI high word = base segment
  8822.         EDI low word = number of segments
  8823.         EBP = start of segment definitions
  8824.     CF set on error
  8825.         AX = error code
  8826.         0001h DOS file access error
  8827.         0002h not a CuaseWay 3P file
  8828.         0003h not enough memory
  8829. SeeAlso: AX=FF2Ah,INT 21/AH=4Bh
  8830.  
  8831. Format of CauseWay executable:
  8832. Offset    Size    Description    (Table 2795)
  8833.  00h  2 BYTEs    signature "3P"
  8834.  02h    DWORD    size of header data in bytes
  8835.  06h    DWORD    size of EXE image data in bytes
  8836.  0Ah    DWORD    number of bytes of program memory required
  8837.  0Eh    WORD    number of segment definitions (see #2797)
  8838.  10h    DWORD    number of relocation table entries
  8839.  14h    DWORD    offset of program entry point
  8840.  18h    WORD    segment list entry number for entry point's CS
  8841.  1Ah    DWORD    initial ESP
  8842.  1Eh    WORD    segment list entry number for initial SS
  8843.  20h    DWORD    control flags (see #2796)
  8844.  24h    DWORD    automatic stack size in bytes if ESP entry = 00000000h
  8845.  28h    BYTE    length of name (name follows program image)
  8846.  29h 23 BYTEs    reserved
  8847. SeeAlso: #1246,#1261 at INT 21/AH=4Bh
  8848.  
  8849. Bitfields for CauseWay executable control flags:
  8850. Bit(s)    Description    (Table 2796)
  8851.  0    16-bit interrupt stack frame
  8852.  7    descriptor table type (0 = GDT, 1 = LDT)
  8853.  14    16-bit default data size
  8854.  31    compressed EXE image
  8855. Note:    bits 0 and 14 should always be equal
  8856. SeeAlso: #2795
  8857.  
  8858. Format of CauseWay segment definition [array]:
  8859. Offset    Size    Description    (Table 2797)
  8860.  00h    DWORD    start offset within program image
  8861.  04h    DWORD    length and type
  8862.         bits 0-19: length
  8863.         bit 20:       granularity (if set, length is in 4K pages)
  8864.         bits 21-24: type
  8865.             0000 code
  8866.             0001 read/write data
  8867.             0010 stack
  8868.             0011 read-only data
  8869.         bit 25: force segment descriptor's D bit to 0
  8870.         bit 26: force segmetn descriptor's D bit to 1
  8871. SeeAlso: #2795
  8872. --------E-31FF25-----------------------------
  8873. INT 31 P - CauseWay - "GetDOSTrans" - GET DOS TRANSFER BUFFER
  8874.     AX = FF25h
  8875. Return: BX = real-mode segment of transfer buffer
  8876.     ECX = transfer buffer size
  8877.     DX = protected-mode selector for transfer buffer
  8878. Note:    the default buffer size of 8K is sufficient for most applications,
  8879.       but an application performing large amounts of file I/O may benefit
  8880.       from allocating its own, larger buffer
  8881. SeeAlso: AX=FF00h,AX=FF26h
  8882. --------E-31FF26-----------------------------
  8883. INT 31 P - CauseWay - "SetDOSTrans" - SET DOS TRANSFER BUFFER
  8884.     AX = FF26h
  8885.     BX = real-mode segment of new transfer buffer
  8886.     ECX = new transfer buffer size
  8887.     DX = protected-mode selector for new transfer buffer
  8888. Return: nothing
  8889. Note:    the specific buffer must be located in conventional memory; only the
  8890.       first 64K will be used
  8891. SeeAlso: AX=FF25h
  8892. --------E-31FF27-----------------------------
  8893. INT 31 P - CauseWay v1.3 - "GetMCBSize" - GET CURRENT MCB ALLOCATION BLOCK SIZE
  8894.     AX = FF27h
  8895. Return: ECX = current threshold
  8896. Desc:    determine the memory allocation size below which CauseWay will use
  8897.       internal MCB chains rather than allocating full 4K pages via DPMI
  8898. SeeAlso: AX=FF00h,AX=FF28h
  8899. --------E-31FF28-----------------------------
  8900. INT 31 P - CauseWay v1.3 - "SetMCBSize" - SET MCB MEMORY ALLOCATION BLOCK SIZE
  8901.     AX = FF28h
  8902.     ECX = new threshold (0000000h to disable MCB memory allocation system)
  8903. Return: CF clear if successful
  8904.         threshold unchanged (default 16K)
  8905.     CF set on error (threshold > 64K)
  8906. Desc:    specify the memory allocation size below which CauseWay will use
  8907.       internal MCB chains rather than allocating full 4K pages via DPMI
  8908. Note:    the specified threshold will be rounded up to the next higher multiple
  8909.       of 4K
  8910. SeeAlso: AX=FF00h,AX=FF27h
  8911. --------E-31FF29-----------------------------
  8912. INT 31 P - CauseWay v1.3 - "GetSels" - ALLOCATE MULTIPLE SELECTORS
  8913.     AX = FF29h
  8914.     CX = number of selectors to allocate
  8915. Return: BX = base selector
  8916. Desc:    allocate multiple contiguous selectors, initializing each to have a
  8917.       base address and limit of zero
  8918. SeeAlso: AX=FF00h,AX=FF04h
  8919. --------E-31FF2A-----------------------------
  8920. INT 31 P - CauseWay v1.3 - "cwLoad" - LOAD ANOTHER CAUSEWAY PROGRAM AS OVERLAY
  8921.     AX = FF2Ah
  8922.     DS:EDX -> filename
  8923. Return: CF clear if successful
  8924.         CX:EDX = CS:EIP of entry point
  8925.         BX:EAX = initial SS:ESP for program
  8926.         SI = PSP for overlay program
  8927.     CF set on error
  8928.         AX = error code (01h file error, 02h not a 3P file, 03h no memory)
  8929. Note:    the returned PSP can be given to "RelMem" (AX=FF0Fh) to release the
  8930.       overlay's memory and selectors; only selectors and memory allocated
  8931.       during loading will be freed by RelMem unless one switches PSPs with
  8932.       INT 21/AH=50h
  8933. SeeAlso: AX=FF00h,AX=FF24h
  8934. --------E-31FF2B-----------------------------
  8935. INT 31 P - CauseWay v1.3 - "cwcInfo" - VALIDATE AND GET SIZE OF CWC FILE
  8936.     AX = FF2Bh
  8937.     BX = file handle for CWC-compressed file
  8938. Return: CF clear if successful
  8939.         ECX = expanded file size
  8940.     CF set on error (not a CWC-compressed file)
  8941. SeeAlso: AX=FF00h,AX=FFFBh
  8942. --------E-31FF2C-----------------------------
  8943. INT 31 P - CauseWay v1.3 - "GetMemSO" - ALLOCATE MEMORY AND RETURN SEL:OFFSET
  8944.     AX = FF2Ch
  8945.     CX:DX = block size in bytes
  8946. Return: CF clear if successful
  8947.        SI:DI = selector:offset of allocated memory
  8948.     CF set on error
  8949. Note:    unlike "GetMem" (AX=FF0Bh), this function will reuse selectors until a
  8950.       segment is full, rather than allocating a new selector for each
  8951.       memory block
  8952. SeeAlso: AX=FF00h,AX=FF2Dh,AX=FF2Eh
  8953. --------E-31FF2D-----------------------------
  8954. INT 31 P - CauseWay v1.3 - "ResMemSO" - RESIZE SELECTOR:OFFSET MEMORY BLOCK
  8955.     AX = FF2Dh
  8956.     SI:DI = selector:offset for memory block
  8957.     CX:DX = new size of block
  8958. Return: CF clear if successful
  8959.        SI:DI = new selector:offset for memory block
  8960.     CF set on error
  8961. SeeAlso: AX=FF00h,AX=FF2Ch,AX=FF2Eh
  8962. --------E-31FF2E-----------------------------
  8963. INT 31 P - CauseWay v1.3 - "RelMemSO" - RELEASE SELECTOR:OFFSET MEMORY BLOCK
  8964.     AX = FF2Eh
  8965.     SI:DI = selector:offset for memory block
  8966. SeeAlso: AX=FF00h
  8967. --------E-31FFFB-----------------------------
  8968. INT 31 P - Causeway v1.3 - "cwcLoad" - LOAD/EXPAND CWC-COMPRESSED FILE
  8969.     AX = FFFBh
  8970.     BX = source file handle
  8971.     ES:EDI -> memory buffer into which to expand file
  8972. Return: CF clear if successful
  8973.         ECX = expanded data length
  8974.     CF set on error
  8975.         EAX = error code (01h file error, 02h bad data, 03h not CWC file)
  8976. Note:    the provided file may consist of the concatenation of several CWC
  8977.       files; the one beginning at the current file position will be
  8978.       expanded
  8979. SeeAlso: AX=FF2Bh
  8980. --------v-32---------------------------------
  8981. INT 32 - VIRUS - reportedly used by "Tiny" Viruses
  8982. SeeAlso: INT 21/AX=FFFFh"VIRUS",INT 31"VIRUS",INT 44"VIRUS"
  8983. --------v-32---------------------------------
  8984. INT 32 - VIRUS - "Plovdiv 1.3"/"Damage 1.3" - ORIGINAL INT 21h VECTOR
  8985. SeeAlso: INT 31"VIRUS",INT 9E"VIRUS"
  8986. --------y-326E-------------------------------
  8987. INT 32 - NOISE.SYS 0.53 - API
  8988.     AH = 6Eh (function ID)
  8989.     AL = subfunction (see INT 32/AX=6E00h)
  8990. Return: CF set on error
  8991.         AL = error code (see #2798)
  8992.     CF clear if successful
  8993. Notes:    INT 32 is only a proposed interface for NOISE.SYS. Use the IOCTL READ
  8994.       from the RANDOM device to determine the interrupt and function ID
  8995.       used by the driver, since future versions may use the Alternate
  8996.       Multiplex Interrupt (AMIS) at INT 2Dh.
  8997.     the beta v0.51 had a substantially different API on INT 32/AH=6Eh
  8998.  
  8999. (Table 2798)
  9000. Values for NOISE.SYS error codes:
  9001.  00h    subfunction not supported
  9002.  FBh    random pool is empty
  9003.  FCh    quality of sample is too low
  9004.  FDh    too many processes using the API or driver
  9005.  FEh    subfunction is disabled in the current build
  9006.  FFh    successful
  9007. --------y-326E00-----------------------------
  9008. INT 32 - NOISE.SYS v0.53+ - INSTALLATION CHECK
  9009.     AX = 6E00h
  9010. Return: AL = installation status
  9011.         00h not installed
  9012.         FFh installed
  9013.         CX = version (ie, 0123h = Version 1.2.3)
  9014.         DX:DI -> signature string
  9015. --------y-326E01-----------------------------
  9016. INT 32 - NOISE.SYS v0.53+ - GET ENTRY POINT
  9017.     AX = 6E01h
  9018. Return: AL = FFh
  9019.     DX:DI -> far call hook
  9020. ----------326E04-----------------------------
  9021. INT 32 - NOISE.SYS v0.55+ - GET INTERRUPT HOOK LIST
  9022.     AX = 6E04h
  9023. Return: AL = status
  9024.         00h = unimplemented
  9025.         04h = DX:BX -> interrupt hook list
  9026.         FEh = subfunction disabled
  9027. Note:    the hook list array ends with API interrupt (usually 32h, although
  9028.       it will differ if the API is installed at another interrupt)
  9029. ----------326E06-----------------------------
  9030. INT 32 - NOISE.SYS v0.55+ - GET DEVICE DRIVER HEADER
  9031.     AX = 6E06h
  9032. Return: AL = number of device drivers in NOISE.SYS chain
  9033.         02h = default (for RANDOM and URANDOM devices)
  9034.     AH = AMIS device driver flags (set to 00h for now)
  9035.     DX:BX -> first device in chain (see #1298)
  9036. SeeAlso: INT 2D/AL=06h
  9037. --------y-326E10-----------------------------
  9038. INT 32 - NOISE.SYS v0.53+ - STATUS CHECK
  9039.     AX = 6E10h
  9040. Return: CF set on error
  9041.         AL = error code (FDh) (see #2798)
  9042.     CF clear if successful
  9043.         AL = status
  9044.         FFh successful
  9045.         BH = number of processes using the API
  9046.         CX = number of random bytes waiting
  9047.         DX = maximum possible bytes waiting
  9048.         (if CX=DX, the pool is full)
  9049. Note:    this subfunction is a convenient way to check the driver if any
  9050.       fresh bytes are waiting in the output pool.
  9051. SeeAlso: INT 32/AH=6Eh,AX=6E00h,AX=6E11h
  9052. --------y-326E11-----------------------------
  9053. INT 32 - NOISE.SYS v0.53+ - GET ENTROPY ESTIMATE
  9054.     AX = 6E11h
  9055. Return: CF set on error
  9056.         AL = error code (00h,FDh,FEh) (see #2798)
  9057.     CF clear if successful
  9058.         EBX = estimated bit count (refer to note below)
  9059.         CL = FRACBITS (number of fractional bits)
  9060.         EDX = low 32-bits of total number of samples added
  9061. Note:  the estimated number of fresh random bits is equal to
  9062.       (EAX >> FRACBITS) + ((EAX & ((1 << FRACBITS)-1) / (1 << FRACBITS))
  9063. SeeAlso: AH=6Eh,AX=6E00h
  9064. --------y-326E12-----------------------------
  9065. INT 32 - NOISE.SYS v0.53+ - ADD SAMPLE FROM FAST TIMER
  9066.     AX = 6E12h
  9067. Return: CF set on error
  9068.         AL = error code (FCh,FDh,FEh) (see #2798)
  9069.     CF clear if successful
  9070.         CX = number of random bytes waiting
  9071. Note:    subfunctions 12h and 13h are meant for applications or devices
  9072.       which are able to gather entropy from other sources which are
  9073.       not polled by NOISE.SYS (for example, a communications driver
  9074.       could use this call to sample packet arrival times).
  9075. SeeAlso: AX=6E00h,AX=6E10h,AX=6E13h
  9076. --------y-326E13-----------------------------
  9077. INT 32 - NOISE.SYS v0.53+ - ADD 16-BIT SAMPLE TO RANDOM POOL
  9078.     AX = 6E13h
  9079.     DX = sample
  9080. Return: CF set on error
  9081.         AL = error code (FCh,FEh) (see #2798)
  9082.     CF clear if successful
  9083.         CX = number of random bytes waiting
  9084. SeeAlso: AX=6E00h,AX=6E11h
  9085. --------y-326E14-----------------------------
  9086. INT 32 - NOISE.SYS v0.53+ - GET FLAGS
  9087.     AX = 6E14h
  9088. Return: BX = flags (see #2799)
  9089.     CX = mask of settable flags in BX
  9090. SeeAlso: AX=6E00h,AX=6E15h
  9091.  
  9092. Bitfields for NOISE.SYS flags:
  9093. Bit(s)    Description    (Table 2799)
  9094.  0    MS Windows active
  9095.  1-5    reserved
  9096.  6    clock drift sampling
  9097.  7    video retrace drift sampling
  9098.  8    network access sampling (not implemented yet in 0.53)
  9099.  9    CD-ROM access sampling (not implemented yet in 0.53)
  9100.  10    DOS spinner
  9101.  11    DOS process start/end and miscellaneous process activity sampling
  9102.  12    mouse movement/button sampling
  9103.  13    disk sampling (INT 13)
  9104.  14    keystroke timings
  9105.  15    reserved for hardware RNG
  9106. --------y-326E15-----------------------------
  9107. INT 32 - NOISE.SYS v0.53+ - SET FLAGS
  9108.     AX = 6E15h
  9109.     BX = flags (see #2799)
  9110. Return: BX = new flags
  9111. Note:    flags which AX=6E14h indicates are not settable should be masked off
  9112.       by ANDing with the CX returned by AX=6E14h
  9113. SeeAlso: AX=6E00h,AX=6E14h
  9114. --------y-326E16-----------------------------
  9115. INT 32 - NOISE.SYS v0.53+ - READ URANDOM BYTES
  9116.     AX = 6E16h
  9117.     CX = number of bytes
  9118.     ES:DI -> buffer
  9119. Return: CF set on error
  9120.         AL = error code (FDh,FEh) (see #2798)
  9121.     CF clear if successful
  9122.         CX = number of random bytes read
  9123. SeeAlso: AX=6E00h,AX=6E12h,AX=6E17h
  9124. --------y-326E17-----------------------------
  9125. INT 32 - NOISE.SYS v0.53+ - READ RANDOM BYTES
  9126.     AX = 6E17h
  9127.     CX = number of bytes
  9128.     ES:DI -> buffer
  9129. Return: CF set on error
  9130.         AL = error code (FBh,FDh,FEh) (see #2798)
  9131.     CF clear if successful
  9132.         CX = number of random bytes read
  9133. SeeAlso: AX=6E00h,AX=6E16h
  9134. ----------326E18-----------------------------
  9135. INT 32 - NOISE.SYS v0.6+ - READ CONTROL RECORD
  9136.     AX = 6E18h
  9137.     CX = buffer size
  9138.     ES:DI -> buffer
  9139. Return: AL = status
  9140.         00h unimplemented (before v0.6)
  9141.         FEh subfunction is disabled
  9142.         FFh successful
  9143.         CX = number of bytes read
  9144. Note:    the control record corresponds to the IOCTL Read record for the RANDOM
  9145.       device
  9146. ----------326E-------------------------------
  9147. INT 32 - NOISE.SYS - RESERVED FOR FUTURE USE
  9148.     AH = 6Eh
  9149.     AL = 19h to 3Fh
  9150. Return: AL = 00h
  9151. Note:    these functions are reserved for future use; user additions to the
  9152.       the driver should use subfunctions 40h to FFh.
  9153. --------!---Section--------------------------
  9154.